Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: QtCoder от Август 20, 2012, 14:30



Название: windowState в windows 7
Отправлено: QtCoder от Август 20, 2012, 14:30
В W7 можно схватить распахнутое окно за заголовок и потащить. Сменится размер и положение окна. Да только вот Qt не меняет статус окна QMainWindow. Оно остается Qt::WindowMaximized.
Это ведет к проблемам - во-первых, статус бар не меняет вид - а должен стать с полосочками.
Во-вторых, неверный статус окна не позволяет корректно восстановить размеры окна при следующем запуске программы.
Событие resizeEvent срабатывает, но если поставить руками setWindowState(Qt::WindowNoState), то окно сорвется с мышки и убежит в произвольное место. То есть событие moved не будет отработано.
Кто-нибудь сталкивался? Побеждал?

Qt 4.7.1, на другие версии перейти не могу


Название: Re: windowState в windows 7
Отправлено: Bepec от Август 20, 2012, 14:36
А что мешает поперехватывать сообщения окна и посмотреть, как реализовано это в других окнах?



Название: Re: windowState в windows 7
Отправлено: QtCoder от Август 20, 2012, 14:59
А что мешает поперехватывать сообщения окна и посмотреть, как реализовано это в других окнах?

А хрен его знает. Как это сделать?


Название: Re: windowState в windows 7
Отправлено: Bepec от Август 20, 2012, 15:03
Ну бери SPY++ и лови сообщения в окно. По умолчанию стоит обработка основных команд аля закрытия или перетаскивания. А вот "W7 функции" там наверняка просто не реализованы.

Ну или проще - winEvent переопределяй у своего виджета и смотри что ему приходит в момент снятия с фулэкрана.


Название: Re: windowState в windows 7
Отправлено: QtCoder от Август 20, 2012, 15:06
Ну бери SPY++ и лови сообщения в окно. По умолчанию стоит обработка основных команд аля закрытия или перетаскивания. А вот "W7 функции" там наверняка просто не реализованы.

Ну или проще - winEvent переопределяй у своего виджета и смотри что ему приходит в момент снятия с фулэкрана.

Как это поможет? Если Qt неправильно обрабатывает событие. Происходит resize и move одновременно. Я не могу скинуть windowState с Maximized состояния.


Название: Re: windowState в windows 7
Отправлено: xokc от Август 20, 2012, 15:31
Qt 4.7.1, на другие версии перейти не могу
Проверил на 4.8.2 - проблем со StatusBar не наблюдаю.


Название: Re: windowState в windows 7
Отправлено: QtCoder от Август 20, 2012, 15:33
Qt 4.7.1, на другие версии перейти не могу
Проверил на 4.8.2 - проблем со StatusBar не наблюдаю.
Пофиксили значит. Надо попробовать оттуда код вытащить.


Название: Re: windowState в windows 7
Отправлено: Bepec от Август 20, 2012, 15:34
QtCoder - я тебе по секрету скажу, Qt обрабатывает сообщения от OS в winEvent. Соответственно пиши туда что хочешь и наслаждайся происходящим, ннэ? :)


Название: Re: windowState в windows 7
Отправлено: QtCoder от Август 21, 2012, 06:08
QtCoder - я тебе по секрету скажу, Qt обрабатывает сообщения от OS в winEvent. Соответственно пиши туда что хочешь и наслаждайся происходящим, ннэ? :)
ну поймаю я это событие дальше то что? как окну сменить статус?