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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Меню не закрывается при переключении в другое приложение  (Прочитано 3737 раз)
Lion
Гость
« : Июнь 21, 2010, 14:50 »

В некоторых случаях открытое меню не закрывается при переключении в другое приложение. Демонстрация такого случае во вложении, это немного измененный пример из Qt - systray. По одинарному клику левой кнопкой по иконке в трее создаётся и отображается меню, если кликнуть на форму приложения systray, то оно пропадёт, но если кликнуть по панели задач или в другом приложении, тогда оно остаётся и при повторном клике создаётся новое. При этом контекстное меню, вызываемое по по правому клику прячется в обоих случаях. Замечено, что если перед отображением меню вызвать функцию activateWindow(), то меню начинает работать нормально, но появляются заметные задержки (примерно 5 сек) между кликом и появлением меню.

Как заставить меню вызываемое левым кликом работать аналогично контекстному (вызов функции activateWindow() не подходит т.к. нет виджета)?

Система WinXP SP3 Qt4.5.3. На Qt 4.6.3 и Win7 ситуация аналогичная.
Записан
_KoT_
Гость
« Ответ #1 : Июнь 21, 2010, 15:26 »

Как варианты:
1
Переопределить в наследнике меню метод virtual void focusOutEvent ( QFocusEvent * event ), чтоб при потере фокуса меню уничтожалось. При создании объекта передавать ему фокус.
В результате меню будет закрываться при потере фокуса.
2
При создании объекта меню проверять, нет ли уже таково же и не создовать новый или уничтожать старый.
В результате не будет создаваться два одинаковых меню.
Это не в точности, что ты хочешь, но тоже решение проблемы. Иногда удобно, что меню не закрывается)
Записан
Wicked_Digger
Гость
« Ответ #2 : Июнь 21, 2010, 16:09 »

Запостить баг в Qt, проблема известная, я с ней сталкивался.
Выход - делать свое меню, а не использовать штатное.
У меня список багов для отправки в Qt большой, до этого нескоро руки дойдут Грустный
Записан
Lion
Гость
« Ответ #3 : Июнь 21, 2010, 19:03 »

Но ведь есть меню, которые работают как надо, например, в том же примере контекстное меню, да и у меня есть много других, которые отлично работают, нужно разобраться в чём отличие.
Записан
Lion
Гость
« Ответ #4 : Июнь 21, 2010, 20:41 »

Решение найдено, нужно вызывать activateWindow() у меню, так делают сами тролли.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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