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-&gt;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:删除MainWindow后QMenu似乎没有被删除

Qt 中如何隐藏 QMenu

Qt中QMenu的菜单关闭处理方法

qt connect放在的对象中 多次new对象时 信号多次触发 怎么解决

QT:QActionGroup加入QMenu后,谁是QActionGroup成员的父母?

如何知道触发了哪个 QMenu 的动作