crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Запретить скрытие окна верхнего уровня, (без наследования)
hoRUS
  опции профиля:
сообщение 5.4.2012, 14:58
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 10.7.2008
Из: Москва
Пользователь №: 231

Спасибо сказали: 5 раз(а)




Репутация:   0  


Можно ли как-нибудь запретить скрытие окна верхнего уровня (когда откуда-нибудь вызывается метод hide() или setVisible(false)), не наследуя класс окна и не переопределяя в вирт. функцию setVisible(bool) ?
Хотелось бы реализовать это с помощью фильтра событий... Но, к сожалению, событие QHideEvent высылается, когда окно уже скрыто.

P.S. Исходная задача - анимировать появление/скрытие различных окон.

Спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 5.4.2012, 19:14
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 297
Регистрация: 23.6.2011
Пользователь №: 2765

Спасибо сказали: 45 раз(а)




Репутация:   3  


Цитата
Исходная задача - анимировать появление/скрытие различных окон.

Если вы имели ввиду сворачивание/разворачивание окна (а это главный источник спонтанного вызова события QHideEvent), то есть QWindowStateChangeEvent.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 6.4.2012, 11:15
Сообщение #3


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Платформонезависимых решений мне не известно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
hoRUS
  опции профиля:
сообщение 6.4.2012, 12:17
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 10.7.2008
Из: Москва
Пользователь №: 231

Спасибо сказали: 5 раз(а)




Репутация:   0  


Цитата(ilyabvt @ 5.4.2012, 20:14) *
Если вы имели ввиду сворачивание/разворачивание окна

Да нет, хотелось бы перехватывать и обрабатывать по-своему именно неспонтанные события скрытия (hide) именно ДО того, как окно реально скроется. Т.е. те скрытия, которые явно программно вызываются с помощью hide() или setVisible(false). Причем неважно, откуда эти вызовы делались - из своего кода или из недр Qt.
Но, видимо, без наследования тут не обойтись. Пока решил проблему, заключив необходимую функциональность максимально в отдельный класс и передав объект этого класса во владение окну, скрытие кот. нужно анимировать. В вирт. ф-ции setVisible() анимируемого окна вызываю нужные методы этого отдельного класса. Это имхо лучше, чем копипастить код в разные классы окон верхнего уровня, главные окна и диалоги, но решение с фильтром событий было бы элегантнее...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 6.4.2012, 12:21
Сообщение #5


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


решения с фильтрами, по моему мнению, приводят к нечитабельности кода программ, старайтесь этого избегать)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
hoRUS
  опции профиля:
сообщение 6.4.2012, 12:27
Сообщение #6


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 10.7.2008
Из: Москва
Пользователь №: 231

Спасибо сказали: 5 раз(а)




Репутация:   0  


Цитата(wiz29 @ 6.4.2012, 13:21) *
решения с фильтрами, по моему мнению, приводят к нечитабельности кода программ, старайтесь этого избегать)


Почему же? Они часто позволяют сконцентрировать какую-то функциональность в одном единственном месте, избегая избыточного "копипастенья". Разве что иногда метод eventFilter() слишком длинным. Но ведь его можно разбить на несколько вызовов и сделать все достаточно читабельным...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
wiz29
  опции профиля:
сообщение 6.4.2012, 13:01
Сообщение #7


Старейший участник
****

Группа: Участник
Сообщений: 600
Регистрация: 7.7.2010
Из: Санкт-Петербург
Пользователь №: 1866

Спасибо сказали: 94 раз(а)




Репутация:   12  


Дело в том что фильтром может быть любой QObject, тем самым скрывать прозрачность реализации.
Когда что то пишешь один то это не принципиально, но для разработки в команде бывают не очевидные применения встраивания функционирования объекта. Но еще раз повторю, это мое мнение.:)

Сообщение отредактировал wiz29 - 6.4.2012, 13:02
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
hoRUS
  опции профиля:
сообщение 6.4.2012, 13:34
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 30
Регистрация: 10.7.2008
Из: Москва
Пользователь №: 231

Спасибо сказали: 5 раз(а)




Репутация:   0  


Цитата(wiz29 @ 6.4.2012, 14:01) *
Дело в том что фильтром может быть любой QObject, тем самым скрывать прозрачность реализации.
Когда что то пишешь один то это не принципиально, но для разработки в команде бывают не очевидные применения встраивания функционирования объекта. Но еще раз повторю, это мое мнение.:)


Согласен. Решением тут может быть создание QObject'ов, специально предназначенных для фильтрации событий (и ни для чего более). И указание этого, в частности, в имени соответветствующего класса. Но что-то нас понесло в оффтоп. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


7 чел. читают эту тему (гостей: 7, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 9.12.2024, 8:15