Это поведение немного сбивает с толку, но я пытаюсь разработать пользовательский интерфейс с минимальным количеством щелчков мышью.Хотя это немного неожиданно, такое поведение делает его немного быстрее, когда вы к нему привыкнете.
Я не писал этого в своем предыдущем сообщении, но я пишу на c ++, и понятия не имеюо питоне ... В любом случае мне удалось перевести идею на c ++, и она работает, но это довольно уродливо ... Я нашел немного лучший подход, просмотрев исходный код qt (когда я задавал этот вопрос, я надеялся, что есть что-то лучше,«предполагаемый» метод)
class MyMenu : public QMenu
{
Q_OBJECT
public:
MyMenu(QWidget* parent);
~MyMenu();
virtual void mouseReleaseEvent( QMouseEvent * event );
};
MyMenu::MyMenu(QWidget* parent):QMenu(parent)
{
}
MyMenu::~MyMenu()
{
}
void MyMenu::mouseReleaseEvent( QMouseEvent * event ){
QAction* act = menuAction();
if (act){
QMenu* men = act->menu();
act->setMenu(0);
QMenu::mouseReleaseEvent(event);
act->setMenu(men);
}else{
QMenu::mouseReleaseEvent(event);
}
}
Единственным недостатком является то, что такое меню будет реагировать на нажатие на все опции с подменю, а не только на нужные.Возможно, было бы неплохо проверить, связано ли что-нибудь с сигналами действия?
На моем Ubuntu это работает.Тем не менее, я думаю, что это не сработает на окнах, где система управляет исключительно меню (если qt не использует некоторые окна с внешним видом меню, а не с системными меню), но я слишком ленив, чтобы установить окна, просто чтобы проверить это;)