Запустите Qt QMenu с exe c () и закройте его при наведении мыши - PullRequest
0 голосов
/ 27 марта 2020

У меня есть QButton, который я хочу использовать в качестве источника всплывающего меню (например, меню со значком шестеренки, которое выскакивает в меню настроек / конфигурации). Итак, я подключился к QPushButton::pressed(), и когда нажата кнопка, я создаю QMenu с QAction элементами, а затем я называю exec() следующим образом:

QPoint mousePos = QCursor::pos();
QAction *action = contextMenu.exec(mousePos);

Это обычно работает ; Появится меню, дорожки и т. д. c. Проблема в том, что он не исчезает при наведении мыши. Типичная парадигма для кнопок всплывающего меню, подобных этой, заключается в том, что когда вы нажимаете кнопку мыши, появляется меню, а когда вы нажимаете кнопку мыши вверх, меню исчезает (при выборе элемента, над которым была наведена мышь, если он был над элементом, или при выборе ничего) если мышь была вне меню). Для меня, однако, меню исчезает только при наведении мыши, если мышь была над элементом меню - выбор этого пункта - , а не , если мышь находилась вне меню. Пользователь должен щелкнуть где-нибудь еще в окне, чтобы убрать всплывающее меню go, если он решит, что не хочет ничего выбирать. Очевидно, это раздражает.

Обратите внимание, что для "контекстного меню" парадигма exec() является стандартной, и это нормально. Но для кнопки всплывающего меню, которую я хочу реализовать, отклонение меню при наведении мыши является стандартным, так что это то, что мне нужно здесь. Как это сделать?

...