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

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

完结撒花

相关推荐
小小编程路7 分钟前
Python 还有容器类型互转、进制转换、字符编码转换
开发语言·windows·python
qeen8721 分钟前
【C++】类与对象之类的默认成员函数(二)
android·c语言·开发语言·c++·笔记·学习
CRMEB系统商城27 分钟前
CRMEB多商户系统(Java)v2.3公测版发布
java·开发语言·人工智能·小程序·开源·php
动能小子ohhh1 小时前
DocForge平台的设计与开发--文件上传接口的实现
开发语言·人工智能·python·langchain·ocr·fastapi
满天星83035771 小时前
【Qt】信号和槽(二) (自定义信号和槽)
开发语言·数据库·qt
超哥--1 小时前
B站视频内容智能分析系统(三):B站视频自动采集
java·开发语言·音视频·ai编程
夏语灬1 小时前
cryptography:Python 密码学标准库的终极选择
开发语言·python·密码学
Jun6262 小时前
QT(19)-VISA控制仪器
开发语言·qt
ANnianStriver2 小时前
PetLumina 07 — 宠物管理升级与 JavaScript 大数精度修复
开发语言·javascript·ai编程·宠物
辣椒思密达2 小时前
Python公开数据采集实战:如何解决请求高频拦截与Session会话中断问题
开发语言·python