为啥我不能将 QAction SIGNAL 与 QFileDialog SLOT 连接起来?

Posted

技术标签:

【中文标题】为啥我不能将 QAction SIGNAL 与 QFileDialog SLOT 连接起来?【英文标题】:Why I can't connect QAction SIGNAL with QFileDialog SLOT?为什么我不能将 QAction SIGNAL 与 QFileDialog SLOT 连接起来? 【发布时间】:2013-06-17 11:41:50 【问题描述】:

我正在尝试为我的文本编辑器编写应用程序菜单,但我不明白为什么信号 triggered 不起作用。它应该打开一个QFileDialog::getOpenFileName,但它没有发生。为什么?

ma​​in.cpp

#include "mainwindow.h"
#include "centralwidget.h"
#include <QApplication>

int main(int argc, char *argv[])

    QApplication a(argc, argv);

    MainWindow      *mainWindow     = new MainWindow;
    CentralWidget   *centralWidget  = new CentralWidget;

    mainWindow->setCentralWidget(centralWidget);
    mainWindow->show();

    return a.exec();

ma​​inwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMenu>
#include <QMenuBar>
#include <QStatusBar>
#include <QAction>
#include <QFileDialog>
#include <QString>

class MainWindow : public QMainWindow

public:
    MainWindow();

public slots:
    void slotFileDialog();
;

#endif // MAINWINDOW_H

ma​​inwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow()
   
    QMenu *fileMenu = new QMenu("File");
    QAction *openAction = new QAction(tr("&Open..."), this);
    connect(openAction, SIGNAL(triggered()),
                            this, SLOT(slotFileDialog()));
    fileMenu->addAction(openAction);

    QMenuBar *mainMenu = new QMenuBar;
    mainMenu->addMenu(fileMenu);
    mainMenu->show();

    QStatusBar *mainStatusBar = new QStatusBar;

    setMenuBar(mainMenu);
    setStatusBar(mainStatusBar);


void MainWindow::slotFileDialog()

    QString fileName = QFileDialog::getOpenFileName(
                this, tr("Open File"),"/home",tr("Text (*.txt)"));

【问题讨论】:

【参考方案1】:

您没有在类定义中包含Q_OBJECT 宏,因此moc 不会为其生成关联文件。

【讨论】:

以上是关于为啥我不能将 QAction SIGNAL 与 QFileDialog SLOT 连接起来?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的数据不能在带有 SIGNAl/SLOT 的表格之间传输?

如何使用 QtTest 库访问 QAction?

为啥我不能忽略 SIGSEGV 信号?

如果 QMenu 是 unique_ptr,为啥 QAction 不添加到 QMenu?

不能在基类中声明 Signal

PySide:为啥在另一个 QmainWINdow(Main) 中触发 QAction 时 QMainWindow 会烧毁并消失