Widget代码讲解

参考:https://zhuanlan.zhihu.com/p/28225011

QT版本为5.12.4

1.main.cpp

 1 #include "widget.h"
 2 #include <QApplication>
 3 
 4 int main(int argc, char *argv[])
 5 {
 6     QApplication a(argc, argv);
 7     Widget w;
 8     w.show();
 9 
10     return a.exec();
11 }

 为了叙述方便,现约定:在以后的代码分析中,方括号中的数字代表行号,例如【1-3】表示第1行到第3行的代码。

【1】包含widget.h头文件,这是我们创建窗口类时,Qt自动为我们生成的头文件,且文件名都为小写。

【2】包含QApplication类。

【4-11】main函数。

【6】创建一个QApplication实例。

如果所创建的是一个窗口应用程序,那么必须要有且只有一个这样的实例,在创建QApplication实例后,会自动将指针赋值给Qt的全局变量qApp,如果想在其它地方使用QApplication实例,则可以直接调用qApp。

因为QApplication实例会进行大量的初始化工作,所以要在使用任何对象之前就创建QApplication实例,因此,main函数开头便创建了QApplication实例。

如果创建的是一个非窗口的应用程序,那么可以调用QCoreApplication来创建实例。

QApplication主要做以下事情(只需了解即可):
1:使用用户的桌面设置,初始化应用程序,例如窗口的调色板,字体等。
2:执行事件处理。
3:也可根据命令行参数,设置自己的内部状态。
4:制定窗口样式,颜色调配,文字国际化。
5:设置剪切板,管理鼠标事件。

【7-8】创建Widget实例,并显示。

【10】进入Qt的主循环事件。当调用exit()函数时,才会退出循环,退出main函数。当程序在准备退出主循环时,会发出aboutToQuit()信号,如果有某些在退出程序前要处理的事情,可链接此信号进行处理。除了主循环外,Qt还有本地循环,可以理解为子循环,这个会在后面的讲解中讲述。

2.widget.h

 1 #ifndef WIDGET_H
 2 #define WIDGET_H
 3 
 4 #include <QWidget>
 5 
 6 namespace Ui {
 7 class Widget;
 8 }
 9 
10 class Widget : public QWidget
11 {
12     Q_OBJECT
13 
14 public:
15     explicit Widget(QWidget *parent = nullptr);
16     ~Widget();
17 
18 private:
19     Ui::Widget *ui;
20 };
21 
22 #endif // WIDGET_H

【6~8】定义命名空间Ui

【10】Widget公有继承QWidget,这样我们就可以调用QWidget提供的方法。QWidget是所有Qt窗口控件的基类,一般情况自定义窗口控件都应该继承QWidget或其子类。

【12】Q_OBJECT宏,必须在类的私有声明中声明这个宏,这样就可以使用Qt的信号槽机制,元对象系统,对象树等Qt特有的功能,否则无法使用。所以这里推荐在创建类时,最好加上此声明,这样的代码会得到很多Qt提供的便利接口。

【15】构造函数,其中parent参数,可指定父窗口。

【19】ui界面对象指针,凡是需要ui界面中的控件对象指针,都可以通过这个指针来进行调用访问。

3.widget.cpp

 1 #include "widget.h"
 2 #include "ui_widget.h"
 3 
 4 Widget::Widget(QWidget *parent) :
 5     QWidget(parent),
 6     ui(new Ui::Widget)
 7 {
 8     ui->setupUi(this);
 9 }
10 
11 Widget::~Widget()
12 {
13     delete ui;
14 }

【5】如果有参数parent不为空,则Widget会成为该指针所指窗口的子窗口

【6】创建Ui::Widget界面对象,并将指针赋值给ui,创建的对象会在析构函数中释放

【8】设置ui界面

 

原文地址:https://www.cnblogs.com/lei-zi/p/11124346.html