[QT]QT入门的项目创建和项目代码的介绍

在学完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呢?这样不会内存泄露吗?

这样不会内存泄漏因为对象树的缘故, 他会给我们进行自动的进行析构的。

完结撒花

相关推荐
用户8055336980313 小时前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner13 小时前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz6 天前
QML Hello World 入门示例
qt
xcyxiner9 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner9 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner10 天前
DicomViewer (添加模型类)3
qt
xcyxiner10 天前
DicomViewer (目录调整) 2
qt
xcyxiner10 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00612 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术12 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript