Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: spectre71 от Июнь 25, 2009, 10:26



Название: QWidget::resizeEvent(QResizeEvent*e)Как отловить момент завершения
Отправлено: spectre71 от Июнь 25, 2009, 10:26
QWidget::resizeEvent - происходит при изменении размера QWidget.
Но проблема в том что при изменении размера родительского QWidget - resizeEvent для дочернего может быть вызван несколько раз, и с разными значениями размеров.
Как определить последний вызов в цепочке вызов resizeEvent для QWidget ?


Название: Re: QWidget::resizeEvent(QResizeEvent*e)Как отловить момент завершения
Отправлено: SABROG от Июнь 25, 2009, 10:38
installEventFilter для проблемного виджета и делай с событием что душа пожелает.


Название: Re: QWidget::resizeEvent(QResizeEvent*e)Как отловить момент завершения
Отправлено: spectre71 от Июнь 25, 2009, 10:59
installEventFilter для проблемного виджета и делай с событием что душа пожелает.
Чем это поможет?
И зачем мне делать installEventFilter для виджета если у него и так переопределен resizeEvent.
Задача не сделать с событием что душа пожелает, а отловить последнее из серии.


Название: Re: QWidget::resizeEvent(QResizeEvent*e)Как отловить момент завершения
Отправлено: ритт от Июнь 25, 2009, 11:31
уже было - ищи


Название: Re: QWidget::resizeEvent(QResizeEvent*e)Как отловить момент завершения
Отправлено: spectre71 от Июнь 25, 2009, 12:16
уже было - ищи
Нашел только http://www.prog.org.ru/topic_6818_0.html (http://www.prog.org.ru/topic_6818_0.html), но там нет решения!


Название: Re: QWidget::resizeEvent(QResizeEvent*e)Как отловить момент завершения
Отправлено: SABROG от Июнь 25, 2009, 13:55
Чем это поможет?
И зачем мне делать installEventFilter для виджета если у него и так переопределен resizeEvent.
Задача не сделать с событием что душа пожелает, а отловить последнее из серии.

Поставь фильтр на нужное окно, когда придет событие QResizeEvent - сними фильтр (uninstall), поставь событие в очередь еще раз через QApplication::sendEvent(). Как только управление оттуда вернется это и будет момент, когда все дети получили свои resize эвенты.


Название: Re: QWidget::resizeEvent(QResizeEvent*e)Как отловить момент завершения
Отправлено: spectre71 от Июнь 25, 2009, 14:09
Поставь фильтр на нужное окно, когда придет событие QResizeEvent - сними фильтр (uninstall), поставь событие в очередь еще раз через QApplication::sendEvent(). Как только управление оттуда вернется это и будет момент, когда все дети получили свои resize эвенты.

 А кто сказал что все resizeEvent у дочернего отработают на resizeEvent у родителя.
 Даже если это так resizeEvent у родителя так же может быть вызван много раз подряд! И что вешать фильтр на весь стек родителей?



Название: Re: QWidget::resizeEvent(QResizeEvent*e)Как отловить момент завершения
Отправлено: SABROG от Июнь 25, 2009, 14:14
Даже если это так resizeEvent у родителя так же может быть вызван много раз подряд!

Для этого и нужен removeEventFilter перед sendEvent. Один раз поймал, снял фильтр, отправил еще раз тоже самое, но от "своего лица" (метода), чтобы поймать момент возврата.


Название: Re: QWidget::resizeEvent(QResizeEvent*e)Как отловить момент завершения
Отправлено: spectre71 от Июнь 25, 2009, 14:26
Даже если это так resizeEvent у родителя так же может быть вызван много раз подряд!

Для этого и нужен removeEventFilter перед sendEvent. Один раз поймал, снял фильтр, отправил еще раз тоже самое, но от "своего лица" (метода), чтобы поймать момент возврата.
Тогда объясни подробнее! Я не понял что для кого и когда делать и на кого вешать?
Есть QWidget - MyWidget для которого я хочу определить последний ресайз из цепочки ресайзов, что дальше?