简体   繁体   English

为什么我无法将QAction SIGNAL与QFileDialog SLOT连接?

[英]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. 我正在尝试为我的文本编辑器编写应用程序的菜单,但是我不明白为什么信号triggered无法正常工作。 It should open a QFileDialog::getOpenFileName , but it does not happen. 它应该打开QFileDialog::getOpenFileName ,但是不会发生。 Why? 为什么?

main.cpp 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将不会为其生成关联的文件。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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