Есть ли способ определить, было ли перемещено окно Qt верхнего уровня? - PullRequest
1 голос
/ 29 мая 2009

Я пытаюсь определить, когда главное окно моего приложения было перемещено. Главное окно - это стандартное QMainWindow, и мы установили eventFilter в QApplication для поиска moveEvents для QMainWindow, но ни одно из них не запускается. По разным причинам создание подклассов QMainWindow на самом деле не вариант.

Будем весьма благодарны за любые мысли по этому поводу, кроме запуска QTimer для постоянной проверки позиции.

Ответы [ 2 ]

1 голос
/ 29 мая 2009

Подклассификация - действительно лучшее решение: - /

В классе, который реализует ваши окна верхнего уровня, вы просто перегружаете эту функцию:

virtual void moveEvent ( QMoveEvent * event )

Из документации:

Этот обработчик события может быть переопределено в подклассе, чтобы получить события перемещения виджета, которые передаются в параметр события. Когда виджет получает это событие, оно уже в новая должность.

Старая позиция доступна через QMoveEvent :: OldPos ().

Это должно позволить вам определить, сместилось ли ваше главное окно. Почему вы не можете создать подкласс? Вы используете экземпляр QMainWindow напрямую? Обычный вариант использования в любом случае подкласс его.

1 голос
/ 29 мая 2009

Полагаю, лучше установить фильтр событий в окне верхнего уровня, а не в приложении. Однако, если вы все еще не получаете QMoveEvent с и работаете в Windows, вы, вероятно, можете переопределить winEventFilter() и ждать WM_MOVE. Аналогичные функции могут быть доступны для Linux и Mac.

Я обычно не рекомендую нарушать независимость от платформы, но иногда это может иметь смысл.

...