Qt Connect 触发 QMenu 的 SIGNAL
Posted
技术标签:
【中文标题】Qt Connect 触发 QMenu 的 SIGNAL【英文标题】:Qt Connect trigger SIGNAL for QMenu 【发布时间】:2015-08-05 11:41:54 【问题描述】:我有一个“最近的文件”文件菜单作为 QMenu,例如:文件-->最近的文件。 在那里,我动态地创建了几个 QAction,其中列出了最近打开的文件。这样可行。
但是当我点击最近的文件 QMenu 时,我想触发一个单独的 SLOT。
connect(ui->menuRecently_Open, SIGNAL(triggered(QAction*)), this, SLOT(onRecentOpenFiles(QAction*)));
应该会打印出 TRIGGER 调试消息
void MainWindow::onRecentOpenFiles(QAction* action)
qDebug() << "TRIGGER";
但是什么也没发生?
【问题讨论】:
可能原因是:This signal is emitted for the main parent menu in a hierarchy. Hence, only the parent menu needs to be connected to a slot; sub-menus need not be connected.. @Amartel 所以它的父级是“文件”,它也是一个 QMenu。但那我该如何解决呢? 嗯,你可以连接到ui->menuFile
。
@Amartel 这不会改变任何事情。我无法触发该插槽,只需单击 QMenu。
How to perform action on clicking a QMenu object only?的可能重复
【参考方案1】:
这按预期工作:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
setupUi(this);
QMenu *fileMenu = menuBar()->addMenu(tr("File"));
QMenu *recentMenu = fileMenu->addMenu(tr("Recent"));
recentMenu->addAction(tr("File1"));
recentMenu->addAction(tr("File2"));
recentMenu->addAction(tr("File3"));
connect(recentMenu, SIGNAL(triggered(QAction*))
, SLOT(onRecentOpenFiles(QAction*)));
void MainWindow::onRecentOpenFiles(QAction *action)
qDebug() << action;
而你做错了什么,或者没有告诉我们一切。
【讨论】:
我的方法与您在示例中的方式完全相同,除了一件事:我在 Qt Creator 设计模式中添加了 fileMenu。以上是关于Qt Connect 触发 QMenu 的 SIGNAL的主要内容,如果未能解决你的问题,请参考以下文章
qt connect放在的对象中 多次new对象时 信号多次触发 怎么解决