Мое приложение Qt использует окна изображений и выполняет сложные многоуровневые перестройки, что может занять некоторое время даже на очень быстрой машине.Поэтому отсутствие перерисовки окна при каждом изменении размера оконной рамки было для меня важно, поэтому ответ на изменение размера оконной рамки не был бы медленным.
Поэтому я решил это следующим образом:
В моем окне изображения я включил отслеживание мыши:
setMouseTracking(true);
Затем в классе окна у меня есть логическое значение, puntme
;устанавливается, когда перехватывается событие resize:
bool puntme;
Затем в событии mousemove:
void imgWindow :: mouseMoveEvent (QMouseEvent * event) {
if (puntme)
{
puntme = false;
needRebuild = true;
update();
}
...
По сути, это происходит, как только пользователь наводит указатель мыши на окно - что вполне естественно для него, если он просто изменяет его размер, - тогда окно перерисовывается с новым размером.Это не происходит во время изменения размера, потому что Qt не пересылает ходы перемещения.
Вместо этого, во время изменения размера, я просто масштабирую уже существующее растровое изображение, которое дает грубоеаппроксимация изменения масштаба с необходимостью обработки фактического нового более или менее доступного разрешения.
В худшем случае пользователь изменяет размеры, удаляет от окна и оставляет грубо масштабированное растровое изображениена месте, пока не вернетесь к нему, и в этот момент он должным образом обновится до фактического нового отображаемого растрового изображения == условия масштаба / размера.
Не существует идеального пути - здесь действительно нужно предоставить Qt(пользователь прекратил изменение размера окна ", но вместо этого это работает хорошо для меня.