Всплывающие окна |
Здравствуйте, гость ( Вход | Регистрация )
Всплывающие окна |
Litkevich Yuriy |
1.3.2010, 22:34
Сообщение
#21
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
SABROG |
1.3.2010, 23:34
Сообщение
#22
|
Профессионал Группа: Участник Сообщений: 1207 Регистрация: 8.12.2008 Из: Russia, Moscow Пользователь №: 446 Спасибо сказали: 229 раз(а) Репутация: 34 |
Проблема может только появится, если диалогов может быть несколько и они скрыты например. Зато если задать уникальное имя объекту, то промахов быть не должно:
Но я не пойму как мы вообще до такого докатились? Диалоги сам по себе редко когда создаются, а это значит, что в большинстве случаев у нас есть указатель на него, который можно поместить в private секцию класса. А проверка делается легко QWidget::isVisible(). |
|
|
BRE |
1.3.2010, 23:34
Сообщение
#23
|
Профессионал Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: 44 |
можно сократить расходы на поиск: QList<QDialog *> dialogs = this->findChildren<QDialog *>(); Т.е. искать сразу нужный класс. Получается быстрее Ну так я про это же. Указание имени так же повысит скорость: QList<QDialog *> dialogs = this->findChildren<QDialog *>( "NameDialog" ); QList<MainDialog *> dialogs = this->findChildren<MainDialog *>(); QList<MainDialog *> dialogs = this->findChildren<MainDialog *>( "MainDialog" ); Сообщение отредактировал BRE - 1.3.2010, 23:38 |
|
|
Litkevich Yuriy |
2.3.2010, 0:21
Сообщение
#24
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
refixs |
20.3.2010, 22:47
Сообщение
#25
|
Студент Группа: Новичок Сообщений: 16 Регистрация: 17.11.2009 Пользователь №: 1238 Спасибо сказали: 0 раз(а) Репутация: 0 |
Доброго времени суток.
Есть всплывающие окно, нужно его закрыть по правому клику мыши, при этом не активируя приложения. Сделал так:
Идея в том чтоб левым щелчком активировать основное окно, а правым убирать всплывающее не изменяя текущего активного окна. Пробовал с event->ignore(); пробовал играться с атрибутами WA_NoMousePropagation и WA_NoMouseReplay. Что-то ничего не получается. Как не пробовал после щелчка мышью на всплывающем окне активным становится всплывающее, а когда оно закрывается активируется основное окно приложения. |
|
|
Litkevich Yuriy |
21.3.2010, 0:14
Сообщение
#26
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
refixs,
а правым убирать всплывающее не изменяя текущего активного окна. можно в основном окне поставить фильтр событий на всплывающее. Если в обработчике фильтра событие не игнорировать, т.е. функцияbool MyWindow::eventFilter ( QObject * watched, QEvent * event ) [virtual] вернёт true то, событие не дойдёт до всплывающего окна, следовательно оно не получит фокус ввода (я так думаю). |
|
|
refixs |
21.3.2010, 2:19
Сообщение
#27
|
Студент Группа: Новичок Сообщений: 16 Регистрация: 17.11.2009 Пользователь №: 1238 Спасибо сказали: 0 раз(а) Репутация: 0 |
Что-то у меня до eventFilter вообще ничего не доходит не в основном окне не в NotifyWindow.
ЗЫ. С 6000ым сообщением Еще такой момент, всплывающее сообщение подкрепляется периодическими вызовами activateWindow у основного окна. activateWindow вызывается раз в 1 секунду заставляя основное окошко мигать оранжевым на панели задач. В итоге получается как-то так: - Появляется всплывающее окно - Щелкаем по нему, оно получает фокус ввода - Срабатывает activateWindow, фокус ввода получает MainWindow |
|
|
Litkevich Yuriy |
21.3.2010, 2:20
Сообщение
#28
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
refixs |
21.3.2010, 2:30
Сообщение
#29
|
Студент Группа: Новичок Сообщений: 16 Регистрация: 17.11.2009 Пользователь №: 1238 Спасибо сказали: 0 раз(а) Репутация: 0 |
Точка остановки стоит в самом начале метода. Запускаю в режиме отладки (в QtCreator) и не останавливается ни при каких обстоятельствах.
Наверно все таки вся загвоздка в этом activateWindow, если без него то окна нормально исчезают.
Если убрать "мигание" на панели задач, то вот так работает. А мигание я наверно сделаю при условии что всплывающие окна скрыты. |
|
|
Litkevich Yuriy |
21.3.2010, 2:49
Сообщение
#30
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Текстовая версия | Сейчас: 27.11.2024, 5:02 |