Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Germiona от Апрель 11, 2008, 11:31



Название: Как узнать,что пользователь развернул окно?
Отправлено: Germiona от Апрель 11, 2008, 11:31
Какой сигнал или какой событие указывает,что пользователь разернул окно?


Название: Re: Как узнать,что пользователь развернул окно?
Отправлено: Пантер от Апрель 11, 2008, 11:37
Ассистента под рукой нет, но, вроде бы, должен сработать resizeEvent...


Название: Re: Как узнать,что пользователь развернул окно?
Отправлено: pastor от Апрель 11, 2008, 12:23
Какой сигнал или какой событие указывает,что пользователь разернул окно?

Есть эвент QEvent::WindowStateChange его-то можно и перехватить:

Цитировать
The window's state (minimized, maximized or full-screen) has changed (QWindowStateChangeEvent).


Название: Re: Как узнать,что пользователь развернул окно?
Отправлено: Germiona от Апрель 11, 2008, 13:18
Нашла функцию windowState(), которая возвращает состояние окна.
 
Вызываю ее в resizeEvent():

Код:
if ( windowState() == Qt::WindowFullScreen) cout<<"FullScreen";

Запускаю приложение,разворачиваю окно на весь экран,но вывод не происходит....Почему?
Если меняю WindowFullScreen на WindowActive, то реагирует адекватно


Название: Re: Как узнать,что пользователь развернул ок&
Отправлено: Karl-Philipp от Апрель 11, 2008, 14:16
а как это Вы хотите: сделать и графическое приложение и консольное? ;)

Если я правильно понял, то в Вашем случае можно, например, показать сообщение QMessageBox

Цитировать
Если меняю WindowFullScreen на WindowActive, то реагирует адекватно
Выводит в консоль ???


Название: Re: Как узнать,что пользователь развернул окно?
Отправлено: Germiona от Апрель 11, 2008, 14:46
Цитировать
Выводит в консоль


Выводит в консоль. Я запускаю приложение через mc и сообщение выводится в его консоле...

Но вопрос не в этом...почему при развернутом окне (если разворачивает пользователь) значение состояние окна Qt::WindowState соотвествует только состоянию активного окна.
А вот если развернуть программно:

Код:
setWindowState(Qt::WindowFullScreen);

то после этого значение состояние меняется


Название: Re: Как узнать,что пользователь развернул окно?
Отправлено: pastor от Апрель 11, 2008, 14:55
Нашла функцию windowState(), которая возвращает состояние окна.
 
Вызываю ее в resizeEvent():

Код:
if ( windowState() == Qt::WindowFullScreen) cout<<"FullScreen";

Запускаю приложение,разворачиваю окно на весь экран,но вывод не происходит....Почему?
Если меняю WindowFullScreen на WindowActive, то реагирует адекватно

Наверное потому, что вы путаете понятия FullScreen и Maximized. Разъясните, что вы подразумеваете под словами "разворачиваю окно на весь экран"?

И ещё внимательно почитайте описание каждого поля enum Qt::WindowState в ассистанте


Название: Re: Как узнать,что пользователь развернул окно?
Отправлено: Germiona от Апрель 11, 2008, 15:28
Цитировать
Наверное потому, что вы путаете понятия FullScreen и Maximized. Разъясните, что вы подразумеваете под словами "разворачиваю окно на весь экран"?

FullScreen - окно на весь экран без рамки,а Maximized - окно на весь экран с рамкой.

"Развернуть на весь экран" - это значит в правом верхнем углу нажать среднюю иконку "развернуть".

А что там еще можно читать....Состояние окна бывает неопределенное,минимизированное,максимизированное,на полный экран и активное....или их комбинация. Описание констант: 0,1,2,4,8 соответственно.

Несмотря на то,что окно было развернуто (нажала в приложении на иконку "развернуть"), его состояние описывалось константой 8.
А если программно задать,то состояние принимает значение 10: комбинация активного окна и Maximized


Название: Re: Как узнать,что пользователь развернул окно?
Отправлено: pastor от Апрель 11, 2008, 15:47
Незаморачивайтесь вы с resizeEvent, он не предназначен для такого. Переопределите changeEvent и в нем споймайте эвент изменения состояния окна или сделайте эвент-фильтр на этот же эвент и будет вам счастье, будите ловить все изменения состояния окна.


Название: Re: Как узнать,что пользователь развернул окно?
Отправлено: ритт от Апрель 11, 2008, 17:33
Цитировать
Наверное потому, что вы путаете понятия FullScreen и Maximized. Разъясните, что вы подразумеваете под словами "разворачиваю окно на весь экран"?

FullScreen - окно на весь экран без рамки,а Maximized - окно на весь экран с рамкой.

"Развернуть на весь экран" - это значит в правом верхнем углу нажать среднюю иконку "развернуть".

надо
Код:
if (isMaximized()) cout<<"WindowMaximized";
равносильно
Код:
if ( windowState() & Qt::WindowMaximized) cout<<"WindowMaximized";

развернуть на весь экран можно только программно
Код:
setWindowState(windowState() ^ Qt::WindowFullScreen);

читайте внимательно ассистант и ответы Пастора - вопросов будет меньше