Russian Qt Forum
Ноябрь 23, 2024, 10:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как узнать,что пользователь развернул окно?  (Прочитано 9400 раз)
Germiona
Гость
« : Апрель 11, 2008, 11:31 »

Какой сигнал или какой событие указывает,что пользователь разернул окно?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Апрель 11, 2008, 11:37 »

Ассистента под рукой нет, но, вроде бы, должен сработать resizeEvent...
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #2 : Апрель 11, 2008, 12:23 »

Какой сигнал или какой событие указывает,что пользователь разернул окно?

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

Цитировать
The window's state (minimized, maximized or full-screen) has changed (QWindowStateChangeEvent).
« Последнее редактирование: Апрель 11, 2008, 14:51 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Germiona
Гость
« Ответ #3 : Апрель 11, 2008, 13:18 »

Нашла функцию windowState(), которая возвращает состояние окна.
 
Вызываю ее в resizeEvent():

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

Запускаю приложение,разворачиваю окно на весь экран,но вывод не происходит....Почему?
Если меняю WindowFullScreen на WindowActive, то реагирует адекватно
Записан
Karl-Philipp
Гость
« Ответ #4 : Апрель 11, 2008, 14:16 »

а как это Вы хотите: сделать и графическое приложение и консольное? Подмигивающий

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

Цитировать
Если меняю WindowFullScreen на WindowActive, то реагирует адекватно
Выводит в консоль Непонимающий
« Последнее редактирование: Апрель 11, 2008, 14:23 от terlan » Записан
Germiona
Гость
« Ответ #5 : Апрель 11, 2008, 14:46 »

Цитировать
Выводит в консоль


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

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

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

то после этого значение состояние меняется
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #6 : Апрель 11, 2008, 14:55 »

Нашла функцию windowState(), которая возвращает состояние окна.
 
Вызываю ее в resizeEvent():

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

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

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

И ещё внимательно почитайте описание каждого поля enum Qt::WindowState в ассистанте
« Последнее редактирование: Апрель 11, 2008, 14:57 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Germiona
Гость
« Ответ #7 : Апрель 11, 2008, 15:28 »

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

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

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

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

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

Сообщений: 2901



Просмотр профиля WWW
« Ответ #8 : Апрель 11, 2008, 15:47 »

Незаморачивайтесь вы с resizeEvent, он не предназначен для такого. Переопределите changeEvent и в нем споймайте эвент изменения состояния окна или сделайте эвент-фильтр на этот же эвент и будет вам счастье, будите ловить все изменения состояния окна.
« Последнее редактирование: Апрель 11, 2008, 16:05 от pastor » Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
ритт
Гость
« Ответ #9 : Апрель 11, 2008, 17:33 »

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

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

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

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

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

читайте внимательно ассистант и ответы Пастора - вопросов будет меньше
« Последнее редактирование: Апрель 11, 2008, 17:37 от Константин » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.051 секунд. Запросов: 23.