一、新建工程 项目
1.文件-新建
选择Qt Widgets Application创建一个桌面的应用
3.选择一个已经构建好的kit
双击Forms下的ui文件,进入编辑界面
注意到 对象和类的名字 MainWindow继承QMainWindow
首先我们来看mainwindow.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
首先是在Ui这个命名空间中前置声明了类MainWindow,也就是窗口对象
用前置声明的类来定义一个指针变量ui
private:
Ui::MainWindow *ui;
再来看实现的mainwindow.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;
}
这里应该注意到有ui_mainwindow.h这个文件,这是根据ui文件的名字自动生成的。
然后调用setupUi
ui->setupUi(this);
setupUi(this)是由.ui文件生成的类的构造函数,这个函数的作用是对界面进行初始化,它按照我们在Qt设计器里设计的样子把窗体画出来,把我们在Qt设计器里面定义的信号和槽建立起来。也可以说,setupUi 是我们画界面和写程序之间的桥梁。
说了这么多,回到main函数
#include "mainwindow.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
前两行是c++的include语句,这里我们引入的是QApplication类,main()函数中第一句创建一个QApplication的实力,对于Qt的
Qt 程序来说,main()
函数一般以创建 application 对象(GUI 程序是QApplication
,非 GUI 程序是QCoreApplication
。QApplication
实际上是QCoreApplication
的子类。)
main()
函数最后,调用app.exec()
,开启事件循环。我们现在可以简单地将事件循环理解成一段无限循环。正因为如此,我们在栈上构建了<ainwindow
对象,却能够一直显示在那里(试想,如果不是无限循环,main()
函数立刻会退出,QLabel
对象当然也就直接析构了)。
在新版本的 Qt 中,app.exec()
的实现机制确定,当最后一个可视组件关闭之后,主事件循环(也就是app.exec()
)才会退出,main()
函数结束(此时会销毁app
)