Подклассификация - действительно лучшее решение: - /
В классе, который реализует ваши окна верхнего уровня, вы просто перегружаете эту функцию:
virtual void moveEvent ( QMoveEvent * event )
Из документации:
Этот обработчик события может быть
переопределено в подклассе, чтобы получить
события перемещения виджета, которые передаются в
параметр события. Когда виджет
получает это событие, оно уже в
новая должность.
Старая позиция доступна через
QMoveEvent :: OldPos ().
Это должно позволить вам определить, сместилось ли ваше главное окно. Почему вы не можете создать подкласс? Вы используете экземпляр QMainWindow
напрямую? Обычный вариант использования в любом случае подкласс его.