Разница в типах QEvent, генерируемых в Mac OS и Linux при закрытии QMenu - PullRequest
0 голосов
/ 08 июля 2019

Я использую QMenu в своем приложении, и когда я щелкаю вне QMenu, чтобы закрыть его, Qt генерирует пару событий.Я обнаружил, что в Linux он генерирует следующие события:

QEvent::MouseButtonPress
QEvent::Close
QEvent::Hide
QEvent::HideToParent
QEvent::UpdateRequest
QEvent::Leave

в Mac OS, генерируются следующие события:

QEvent::Close
QEvent::Hide
QEvent::HideToParent
QEvent::UpdateRequest
QEvent::Leave

Поскольку видно, что при закрытии QMenu, QEvent :: MouseButtonPress не генерируется в среде Mac.Я хочу знать, является ли это ошибкой в ​​Qt или это преднамеренное поведение.

В моем коде я вычисляю координаты щелчка мыши, когда QMenu закрывается, в методе mousePressEvent (), который у меня естьпереопределено в моем пользовательском классе меню, который наследует QMenu.Но оно ломает все приложение в Mac OS по причине, указанной выше.

Я использую Qt версия 5.12.3

1 Ответ

0 голосов
/ 09 июля 2019

Вероятно, это связано с тем, что в macO меню управляются операционной системой.

На это указывает функция QMenu::toNSMenu(). Вряд ли для вас NSMenu, по-видимому, не позволяет получить координату щелчка мыши.

Если я могу предложить вам изменить вашу реализацию и не полагаться на MousePressEvent на любой платформе. QMenus можно взаимодействовать с помощью клавиатуры, в этом случае у вас не будет MousePressEvent, и у вас будет та же проблема.

...