Я думаю, что это ожидаемое поведение. Если вы хотите ограничить размеры резиновой ленты, просто закрепите их в mouseMoveEvent
переопределении ...
void frame_displayer::mouseMoveEvent(QMouseEvent *event)
{
if(_rubberBand != nullptr)
{
if (this->underMouse())
{
if (_lastClickedBtn == Qt::LeftButton)
{
QPoint mouseCurrentPoint = event->pos();
/*
* Clamp mouseCurrentPoint to the QRect of this widget.
*/
auto clamp_rect = rect();
mouseCurrentPoint.rx() = std::min(clamp_rect.right(), std::max(clamp_rect.left(), mouseCurrentPoint.x()));
mouseCurrentPoint.ry() = std::min(clamp_rect.bottom(), std::max(clamp_rect.top(), mouseCurrentPoint.y()));
_rubberBand->setGeometry(QRect(_mouseOriginClickPoint, mouseCurrentPoint).normalized());
}
}
}
}
Выезд NGen
Кроме того, при загрузке большого количества данных по загрузке переместите ее в другой поток и покажите индикатор или что-то (в то время как она загружается), так, по крайней мере, форма открывается быстро, даже если она берет немного дольше для фактических данных для загрузки.
.NET 3,5 SP1 также теперь включает способность создать быстрый SplashScreen, не используя C++
.NET 3,5 SP1 действительно имеет тенденцию делать запуск немного более быстрым. Также посмотрите серию сообщений в блоге при подъеме экрана-заставки (в собственном C++) при запущении приложения WPF в Блоге Логотипов.
Вы могли бы также хотеть рассмотреть обработку перемещения прочь к рабочим потокам. Когда Ваше приложение запускается, загружают корневой UI, но не данные - скорее загружают асинхронные данные (и создают окна клавиатуры и т.д., поскольку каждый элемент данных входит).
Приложения .NET, созданные для .NET 3.0 или более поздних версий, намного лучше работают в более новых версиях Windows, Windows Vista, Windows 7 и т. Д.