Russian Qt Forum
Ноябрь 23, 2024, 15:19
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
Перекидывать фокус после PopUpContextMenu()
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Перекидывать фокус после PopUpContextMenu() (Прочитано 4187 раз)
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Перекидывать фокус после PopUpContextMenu()
«
:
Сентябрь 23, 2014, 23:25 »
Есть айтемы на сцене, нажали на одном правую кнопку, словили событие, и вызвали соответствующее PopUpContextMenu(). Всё хорошо.
Но есть такой момент - если сразу после того, как локальное меню появилось, на этой же сцене отвести курсор на другой айтем и на нём сразу нажать правую кнопку, то мы... словим событие не для этого айтема, а для того, у которого нажали кнопку перед этим. Соответственно появится меню не того айтема, на который был переведен курсор, просто над ним появится меню предыдущего айтема. Что есть явный интерфейсный косяк в приложении. Происходит это потому, что появляющееся меню забирает фокус, и пока явно в сцену
левой
кнопкой не ткнешь, он у меню остается. Почему-то тыканье в сцену
правой
кнопкой фокус у меню не забирает, только левой. Простое перемещение курсора по этой сцене hover по айтемам на ней уже не перемещает, методы hoverEnterEvent() для других айтемов сцены не вызываются, итд, пока меню не исчезнет по какой-то причине.
Вот вопрос - как без конструирования своей надстройки над имеющимся контекстным меню (даже не хочется об этом думать) то ли хотя бы закрыть его, если клик правой кнопкой не в него произошел, то ли отобрать у меню фокус при клике куда-то именно правой кнопкой?
«
Последнее редактирование: Сентябрь 24, 2014, 12:11 от Гурман
»
Записан
2^7-1 == 127, задумайтесь...
xokc
Птица говорун
Offline
Сообщений: 976
Re: Перекидывать фокус после PopUpContextMenu()
«
Ответ #1 :
Сентябрь 24, 2014, 08:43 »
Кстати да, реально этот момент раздражает. При наличии активного context меню первый клик мышью "пожирается" на его закрытие. Даже приложение не закрыть с первого клика. Может надо какой-нибудь future request в баг трекере Qt замутить?
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Перекидывать фокус после PopUpContextMenu()
«
Ответ #2 :
Сентябрь 24, 2014, 12:13 »
Цитата: xokc от Сентябрь 24, 2014, 08:43
Кстати да, реально этот момент раздражает. При наличии активного context меню первый клик мышью "пожирается" на его закрытие. Даже приложение не закрыть с первого клика. Может надо какой-нибудь future request в баг трекере Qt замутить?
Просто правый клик должен также точно переводить фокус, как и левый, а потом уже отрабатываться, как правый клик. И всё. может это и есть уже где-то в глубине Qt, но по-умолчанию почему-то выключено.
Записан
2^7-1 == 127, задумайтесь...
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Перекидывать фокус после PopUpContextMenu()
«
Ответ #3 :
Сентябрь 24, 2014, 14:50 »
Я бы попробовал через хвильтр. Отловить правый press, если мышь снаружи activePopupWidget - закрыть и послать левый press виджету под курсором
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Перекидывать фокус после PopUpContextMenu()
«
Ответ #4 :
Сентябрь 24, 2014, 17:26 »
Цитата: Igors от Сентябрь 24, 2014, 14:50
Я бы попробовал через хвильтр. Отловить правый press, если мышь снаружи activePopupWidget - закрыть и послать левый press виджету под курсором
Это где? В каком объекте ловить? В чьем методе, при обработке чего? Закрыть
ЧТО
? Проблема в
фокусе
.
(сорри, мне чичас влом думать, у меня день варенья, вино пью... водку посреди недели нехорошо... вино хорошо... водку буду в пятницу...)
«
Последнее редактирование: Сентябрь 24, 2014, 17:32 от Гурман
»
Записан
2^7-1 == 127, задумайтесь...
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Перекидывать фокус после PopUpContextMenu()
«
Ответ #5 :
Сентябрь 24, 2014, 17:49 »
Цитата: Гурман от Сентябрь 24, 2014, 17:26
Это где? В каком объекте ловить? В чьем методе, при обработке чего? Закрыть
ЧТО
?
Фильтр повесить на QApplication. Фильтр получает событие - проверяем правую кнопку. И фильтр получает получателя события - сверяем с activePopupWidget(). После праздников разберетесь
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Перекидывать фокус после PopUpContextMenu()
«
Ответ #6 :
Сентябрь 24, 2014, 18:47 »
Цитата: Igors от Сентябрь 24, 2014, 17:49
Фильтр повесить на QApplication. Фильтр получает событие - проверяем правую кнопку. И фильтр получает получателя события - сверяем с activePopupWidget().
Эммм... приложение - это конструктор из плагинов. Два из них сейчас внутри себя имеют свои QApplication. Фик его знает, сколько еще таких будет. Проблема обозначилась везде. Впрочем, для главного приложения возможно что-то похожее и можно соорудить, но после N выпитого вина выглядит, как костыль. Надо будет еще посмотреть, но...
Цитировать
После праздников разберетесь
...подозреваю, что это уже в понедельник.
И все-таки, хотелось бы как-то в ContextMenu вмешаться - так было бы кошернее.
«
Последнее редактирование: Сентябрь 24, 2014, 18:50 от Гурман
»
Записан
2^7-1 == 127, задумайтесь...
Bepec
Гость
Re: Перекидывать фокус после PopUpContextMenu()
«
Ответ #7 :
Сентябрь 24, 2014, 21:04 »
Эээммм... QApplication должен быть 1 для приложения как бы...
Насколько я помню при попытке создания второго Qt ругается и выдаёт первый экземпляр.
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Перекидывать фокус после PopUpContextMenu()
«
Ответ #8 :
Сентябрь 24, 2014, 21:16 »
Цитата: Bepec от Сентябрь 24, 2014, 21:04
Эээммм... QApplication должен быть 1 для приложения как бы...
Насколько я помню при попытке создания второго Qt ругается и выдаёт первый экземпляр.
Ну да. Там свои QMainWindow. Но для топика не важно.
Записан
2^7-1 == 127, задумайтесь...
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...