简体   繁体   中英

Why I can't connect QAction SIGNAL with QFileDialog SLOT?

I'm trying to write application's menu for my text editor, but I don't understand why signal triggered does not working. It should open a QFileDialog::getOpenFileName , but it does not happen. Why?

main.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();
}

mainwindow.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

mainwindow.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)"));
}

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM