2017-01-10 9 views
1

Ich habe ein QMenu und mehrere QWidgetActions, mit Checkboxen, wenn ich versuche, auf einen Bereich des QMenu zu klicken, wird das Menü geschlossen. Ich möchte das verhindern.Verhindern, dass ein QMenu schließt, wenn eine seiner QAction nicht ausgelöst wird

Hier ist, wie ich die Aktionen und die Menüs machen.

QWidgetAction* action = new QWidgetAction(menu); 
action->setCheckable(checkable); 
action->setData(data);  

QWidget *containerWidget = new QWidget(menu); 
QHBoxLayout *hbox = new QHBoxLayout(containerWidget); 
QCheckBox *checkBox = new QCheckBox(menu); 
checkBox->setText(title); 
QObject::connect(checkBox, &QCheckBox::toggled, action, &QAction::trigger); 

hbox->addWidget(checkBox); 
hbox->addWidget(widget); 

QObject::connect(action, &QAction::toggled, [this]() { OnPoiFilterCheckBox(); }); 
containerWidget->setLayout(hbox); 

action->setDefaultWidget(containerWidget); 
action->setData(data); 
menu->addAction(action); 

Antwort

1

ein Signal Blocker wie gezeigt:

class filter_menu : public QMenu 
{ 
    Q_OBJECT 
public: 
    filter_menu(QWidget *parent = 0) : QMenu(parent) {} 

    virtual void mouseReleaseEvent(QMouseEvent *e) 
    { 
     QAction *action = activeAction(); 
     if (action && action->isEnabled()) { 
      QSignalBlocker blocker(action); 
      action->setEnabled(false); 
      QMenu::mouseReleaseEvent(e); 
      action->setEnabled(true); 

     } 
     else 
      QMenu::mouseReleaseEvent(e); 
    } 

}; 
Verwandte Themen