在学完c++之后QT 是我们一个非常好的练习c++语法的东西。
QT环境的下载:
官方网站:官方网站请点击
清华镜像网站:https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt/
官方网站不一定能加载进去。
具体的安装方法链接:https://www.bilibili.com/video/BV12MwXzyEFp?p=2&vd_source=c7b9d9b9a3363ad5eed2bfcc1ef18343

项目的创建:
我们进入QT的环境,点击文件。再点击新建文件

我们可以看到我下面图片如果使用QT写一个GUI的程序就选择这个。
我们还能发现下面的QT不仅仅支持C++, 还支持Java , py...

设置名称和路径:然后点击下一步

下图出现三种的创建风格:
qmake:是老牌的QT工具了。
Cmake:这不i是QT的专属现在很多的开源项目都在使用了。
Qbs:新一代的 QT工具。
构建系统QT写的程序, 会涉及到一些元编程的技术"通过代码来生成代码"
这里我们选择qmake

使用QT creator创建项目,会自动的生成一些代码出来。 生成的代码就包含一个类此处"QMainWindow"就是要自动的选择生成这个父类是谁



我们初学者要选则:

后续一直下一步就可以了。
项目代码的介绍:
第一个文件: main.cpp
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])//main的命令行参数
{
QApplication a(argc, argv);//编写一个QT的图形化界面的程序,一定要有个Qapplication对象
Widget w;//刚才填写的项目生成队形的类名
w.show();//看名字是让控件显示出来同理.hide: 让控件隐藏起来
//wight的父类是QWIght很多的方法都是在父类中继承下来的。
return a.exec();//exec表示让程序执行起来
}
第二个文件: widget.h
#ifndef WIDGET_H
#define WIDGET_H //条件编译要求头文件只被包含一次 现在建议写#progma once
#include <QWidget> //对应父节点的头文件
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; } //命名空间封装一下widget这个类
QT_END_NAMESPACE
class Widget : public QWidget //更形象的说明了Widget是继承QWidget这个类的
{
Q_OBJECT //宏 信号和槽才会具体的使用
public:
Widget(QWidget *parent = nullptr); //构造, 看数据类型他有关对象树的概念
~Widget(); //析构
private:
Ui::Widget *ui; //与form file有关
};
#endif // WIDGET_H
第三个文件: widget.cpp
cpp
#include "widget.h" // 创建项目时生成的头文件
#include "ui_widget.h" // form file生成的头文件
Widget::Widget(QWidget *parent) // 对内部的资源的一些初始化
: QWidget(parent)
, ui(new Ui::Widget) //把form file生成的界面和当前的widget关联起来
{
ui->setupUi(this);
}
Widget::~Widget()// 析构掉我所new出来的ui文件
{
delete ui;
}
当然我们前面有几处说到了form file那现在我们就浅谈form file
form file的解释:
浅谈form file 我们在form下面有一个ui文件,这个文件是作什么的呢: 我们双击一下就会进入到这么一个界面:


我们能看到他与html一样, 我们能看到
双标签: 形如开头<ui> 结尾</ui>
单标签: 形如<resources/>
当然这些标签是人为定义的, 是谁定义的呢? 是那些开发QT的大佬进行定义的。
对应的工具: xml
对应的xml会调用一些qmake的工具来进一步生成对应的C++代码。
文件四: .pro工程文件
有点类似Linux的makefile

我们在使用创建项目的过程中会选择在这文件所在的路径

会发现它自动的给我们生成了build...的文件我们可以点击看一下
会生成一些列的临时文件。

QT的第一个成序编写一个hello word的程序
方法一:
不写代码的方法:

我们在下面发现一个label的东西,这玩意不要质疑, 他就是一个标签我们采用拖拽的方式来进行对应的项目的创建。

我们将内容进行修改之后,点击一下运行就能让我们的程序跑起来了。
我们对应的ui文件也发生了改变

只是我们直接使用控件的效果, 当然我们也能使用C++代码来进行编写:
方法二:
第11行我们在括号里填充了this 作用是给这个 label指定一个父对象,这个父对象是神么呢?
就是我们cpp中的widget w(与对象树有关)

在这里我们能发现一个奇怪的问题?
关于内存泄漏:
我们new出来了一个对象应该delete掉防止内存的泄露。
在这里我们为什么不用delete呢?这样不会内存泄露吗?
这样不会内存泄漏因为对象树的缘故, 他会给我们进行自动的进行析构的。
完结撒花
