Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: NOX86 от Март 07, 2010, 05:30



Название: [РЕШЕНО] Как перехватить потерю\появление фокуса в QMdiSubWindow?
Отправлено: NOX86 от Март 07, 2010, 05:30
Есть класс Document, отнаследованый от QMdiSubWindow, который совершает некоторые действия при появлении\потере фокуса. Класс Document наследуется инными класами так же, причём они устанавливают виджет(ы) для QMdiSubWindow;
 То есть: (Потомки) <- Document <- QMdiSubWindow
 Хотелось бы весь функционал относящийся к появлению\потере фокуса реализовать в классе Document
Проблема состоит в том, что
1. QMdiSubWindow в режиме табов не посылает событий изменений фокуса (QFocusEvent).
2. Я точно не знаю какой будет верхний виджет после последнего наследования.

 Как перехватить потерю\появление фокуса, преключения между табами\окнами в QMdiSubWindow?
 Хочу обратить внимание, что мне надо отлавливать как появление так и _потерю_ фокуса.


Название: Re: Как перехватить потерю\появление фокуса в QMdiSubWindow?
Отправлено: NOX86 от Март 16, 2010, 20:48
В моём случае помогло отлавливание состояния окна (http://doc.trolltech.com/4.6/qt.html#WindowState-enum)
А именно Qt::WindowNoState и Qt::WindowActive
Сделать это можно при помощи сигнала windowStateChanged(Qt::WindowStates,Qt::WindowStates) (http://doc.trolltech.com/4.6/qmdisubwindow.html#windowStateChanged)
или отлавливая QWindowStateChangeEvent (http://doc.trolltech.com/4.6/qwindowstatechangeevent.html) событие