gpt4 book ai didi

c++ - 防止 QMenu 在其 QAction 之一未被触发时关闭

转载 作者:搜寻专家 更新时间:2023-10-31 02:13:19 25 4
gpt4 key购买 nike

我有一个 QMenu 和几个带有复选框的 QWidgetActions,当我尝试单击 QMenu 的任何区域时,菜单会关闭。我想阻止这种情况。

这是我执行操作和菜单的方式。

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);

最佳答案

如图所示使用信号拦截器:

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);
}

};

关于c++ - 防止 QMenu 在其 QAction 之一未被触发时关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41564707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com