1.Qt项目构建
.pro文件间接
- QT += gui core
QT:代表引入QT的模块
gui 界面
core 核心
```
- TARGET = test
```cpp
TARGET:代表生成的可执行文件的名称xxx.exe
test:生成test.exe
```
- TEMPLATE = app
```cpp
TEMPLATE:模板(项目的结构)
app:application应用程序
```
- SOURCE += main.cpp\
```cpp
SOURCE:源代码(自动生成的)
```
- INCLUDE = C:/boost/include
```cpp
INCLUDE:引入的外部库
```
- HEADER += xxx.h\
```cpp
HEADER:头文件
```
# 2.新建QT项目详解
## 2.1 Main函数
```cpp
#include "widget.h" //创建项目时,基类为QWidget生成的自定义widget类
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv); //QApplication a应用程序对象 有且仅有一个
Widget w; //使用自定义widget类,创建对象w
w.show(); //w.show()以后才会展示界面(默认隐藏)
return a.exec(); //a.exec() 进行消息循环 阻塞
}
2.2 自定义widget类
2.2.1 widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
class Widget : public QWidget //继承自QWidget
{
Q_OBJECT //Q_OBJECT是QT中定义的宏
public:
Widget(QWidget *parent = nullptr); //构造函数,参数是一个指针(父类对象的指针),默认参数为空
~Widget();
};
#endif // WIDGET_H
- Q_OBJECT:这个宏的展开将为我们的类提供信号槽机制、国际化机制以及 Qt 提供的不基于 C++ RTTI 的反射能力。因此,如果你觉得你的类不需要使用信号槽,就不添加这个宏,就是错误的。其它很多操作都会依赖于这个宏。
2.2.2 widget.cpp
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent) //显示调用父类的构造函数
{
}
Widget::~Widget()
{
}
3.QT的继承关系
3.1 三大界面基类
QMainWindow
QWidget
QDialog
3.2 对象树
只有继承了QObject或其子类才能够被加入到QT的对象树中
3.2.1 加入对象树的作用
所有new出来的对象,加入到了对象树中。我们就不用管它的释放了
在对象树释放是,从叶子节点(最底层的节点)开始一层一层的释放。(确保了堆上的空间只被释放一次)
构建顺序相反,先构建QObject,然后一层一层的向下构建(添加到对象树中)
3.2.2 如何添加到对象树中
- 在new时,通过构造函数传入参数this/或父类对象的指针
- 对象指针->setParent(this/父类对象的指针);
4.Qt中的坐标系
以左上角为(0,0)
x正向 →
y正向 ↓