Запретить скрытие окна верхнего уровня, (без наследования) |
Здравствуйте, гость ( Вход | Регистрация )
Запретить скрытие окна верхнего уровня, (без наследования) |
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 |
Если вы имели ввиду сворачивание/разворачивание окна Да нет, хотелось бы перехватывать и обрабатывать по-своему именно неспонтанные события скрытия (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 |
решения с фильтрами, по моему мнению, приводят к нечитабельности кода программ, старайтесь этого избегать) Почему же? Они часто позволяют сконцентрировать какую-то функциональность в одном единственном месте, избегая избыточного "копипастенья". Разве что иногда метод 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 |
Дело в том что фильтром может быть любой QObject, тем самым скрывать прозрачность реализации. Когда что то пишешь один то это не принципиально, но для разработки в команде бывают не очевидные применения встраивания функционирования объекта. Но еще раз повторю, это мое мнение. Согласен. Решением тут может быть создание QObject'ов, специально предназначенных для фильтрации событий (и ни для чего более). И указание этого, в частности, в имени соответветствующего класса. Но что-то нас понесло в оффтоп. |
|
|
Текстовая версия | Сейчас: 4.12.2024, 17:45 |