主窗口.h:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
主窗口.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
主文件
#include <QtGui/QApplication>
#include "mainwindow.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
QObject::connect(pushButton, SIGNAL(clicked()),
&a, SLOT(quit()));
return a.exec();
}
所有代码都在上面给出。在一般的 Qt GUI 程序中,我在 UI 窗体上放置了一个 pushButton,并尝试在 main.cpp 中使用它。但是给出了以下错误:
main.cpp:10: Error:'pushButton' was not declared in this scope
你能给我一个解决方案吗?如何在 main.cpp 中调用它?谢谢!
补充1:
主窗口.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
QObject::connect(ui->pushButton, SIGNAL(clicked()),
QCoreApplication::instance(), SLOT(close()));
}
MainWindow::~MainWindow()
{
delete ui;
}
如果我这样做,那么程序可以运行但不能关闭整个应用程序。我猜那是因为 QCoreApplication::instance() 在构造函数阶段返回 null , QApplication 不存在,对吧?
补充2:
主窗口.cpp
void MainWindow::on_pushButton_clicked()
{
close();
}
一种解决方案是在 mainwindow.cpp 中添加新的 pushButton 插槽,如上所示。但我仍然希望知道如何按照我的方式去做(这篇文章的主要部分)?
补充3:
Alberto 的代码通过使用QWidget可以正常工作,如下所示。
ui->setupUi(this);
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(close()));