欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 新车 > QT初级使用教程

QT初级使用教程

2025/4/2 7:50:45 来源:https://blog.csdn.net/qingttqing/article/details/146607375  浏览:    关键词:QT初级使用教程

QT初级

  • 1、简介
    • 1.1 安装
    • 1.2 设置
    • 1.3 在VS中配置Qt
    • 1.3 帮助文档
  • 2、Qt项目
    • 2.1 创建项目
    • 2.1 项目文件
    • 2.2 Qt中的窗口类
      • 窗口显示
    • 2.3 坐标体系
    • 2.4 内存回收

1、简介

QT是一个跨平台的C++应用程序开发框架。几乎支持所有的平台, 可用于桌面程序开发以及嵌入式开发。

  1. Qt是标准 C++ 的扩展, C++的语法在Qt中都是支持的。
  2. 良好封装机制使得 Qt 的模块化程度非常高,可重用性较好,可以快速上手。
  3. Qt 提供了一种称为 signals/slots 的安全类型来替代 callback(回调函数),这使得各个元件 之间的协同工作变得十分简单。

QT中的模块:

  • Qt 基本模块(Qt Essentials):提供了 Qt 在所有平台上的基本功能。
  • Qt 附加模块(Qt Add-Ons):实现一些特定功能的提供附加价值的模块。
  • 增值模块(Value-AddModules):单独发布的提供额外价值的模块或工具。
  • 技术预览模块(Technology Preview Modules):一些处于开发阶段,但是可以作为技术预览使用的模块。
  • Qt 工具(Qt Tools):帮助应用程序开发的一些工具。

在这里插入图片描述

1.1 安装

下载地址(最新版本已经不支持安装包下载安装,必须通过在线安装方式安装
官方: https://download.qt.io/
清华大学: https://mirrors.tuna.tsinghua.edu.cn/qt/

  • 5.14版本以下可以通过下载EXE安装文件进行安装。
  • 5.15版本以上通过在线安装,在线安装官网镜像较慢,可以配置国内镜像安装。
    下载完安装包后,不要直接双击运行,否则将会导致安装时出现超时情况
    使用以下方式打开,避免超时情况:
    进入cmd->进入下载路径:
    qt-online-installer-windows-x64-4.8.1.exe(需要安装的版本号) --mirror https://mirrors.ustc.edu.cn/qtproject // qt-online-installer-windows-x64-4.8.1.exe表示下载的安装包名称
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

1.2 设置

当我们编写一个Qt程序,并且生成了可执行程序,这个可执行程序运行的时候默认需要加载相关的Qt动态库(因为默认是动态链接,静态链接则不需要)。为了保证可执行程序在任何目录执行都能链接到对应的动态库,我们可以将Qt模块对应的动态库目录设置到系统的环境变量中。

设置环境变量:
D:\Qt\Tools\mingw1310_64\bin
D:\Qt\6.8.3\mingw_64\bin

在这里插入图片描述
在这里插入图片描述

1.3 在VS中配置Qt

  • VS中使用QT需要进行版本的匹配。
    在这里插入图片描述
    高版本的VS也可以安装低版本的Qt,需要安装低版本的编译器即可。
    在这里插入图片描述
    VS2019+QT5.14.2安装及配置编译环境

在VS中下载插件,然后关闭VS。VS会自动安装插件
在这里插入图片描述
在VS中配置编译器:
在这里插入图片描述
之后就可以在VS中打开Qt的项目了!VS只是一个载体,用于显示Qt程序(UI),所采用的编译器还是Qt中的编译器。若在高版本的VS中使用低版本的Qt,则需要在VS中安装低版本的编译器,然后QT中将VS中安装的低版本编译器设置进去
在这里插入图片描述

在这里插入图片描述

1.3 帮助文档

[官方帮助文档](链接: link)

2、Qt项目

2.1 创建项目

在这里插入图片描述
选择需要创建的项目,然后安装向导设置即可。
编译选用Qmake,否则不会生成Qt项目文件。

2.1 项目文件

  1. 项目文件(.pro):在创建的Qt项目中自动生成了一个后缀为 .pro 的项目文件,该文件中记录着项目的一些属性信息
  2. main.cpp:在这个源文件中有程序的入口函数 main()
  3. mainwindow.ui:在Qt中每一个窗口都对应一个可编辑的可视化界面(*.ui), 这个界面对应的是一个xml格式的文件, 一般情况下不需要在xml格式下对这个文件进行编辑, 关于这个文件结构了解即可。
  4. mainwindow.h:这个文件是窗口界面对应的类的头文件。
  5. mainwindow.cpp:这个文件是窗口界面对应的类的源文件。

2.2 Qt中的窗口类

在这里插入图片描述

窗口显示

  • 内嵌窗口
    依附于某一个大的窗口, 作为了大窗口的一部分
    大窗口就是这个内嵌窗口的父窗口
    父窗口显示的时候, 内嵌的窗口也就被显示出来了
  • 不内嵌窗口
    这类窗口有边框, 有标题栏
    需要调用函数才可以显示
// QWidget是所有窗口类的基类, 调用这个提供的 show() 方法就可以显示将任何窗口显示出来
// 非模态显示
void QWidget::show();	// 显示当前窗口和它的子窗口// 对话框窗口的非模态显示: 还是调用show() 方法
// 对话框窗口的模态显示
[virtual slot] int QDialog::exec();

2.3 坐标体系

在Qt关于窗口的显示是需要指定位置的,这个位置是通过坐标来确定的,所有坐标的选取又都是基于坐标原点来确定的。

所有坐标的确定都需要先找到坐标原点, Qt的坐标原点在窗口的左上角。
在这里插入图片描述
在一个Qt窗口中一般都有很多子窗口内嵌到这个父窗口中,其中每个窗口都有自己的坐标原点,子窗口的位置就是它的父窗口坐标体系中的坐标点。Qt中窗口显示的时候使用的相对坐标, 相对于自己的父窗口
在这里插入图片描述

// 所有窗口类的基类: QWidget
// QWidget中提供了移动窗口的 API函数
// 参数 x, y是要移动的窗口的左上角的点, 窗口的左上角移动到这个坐标点
void QWidget::move(int x, int y);
void QWidget::move(const QPoint &);

2.4 内存回收

在Qt中创建对象的时候会提供一个 Parent对象指针(可以查看类的构造函数)。

QObject是以对象树的形式组织起来的。当你创建一个QObject对象时,会看到QObject的构造函数接收一个QObject指针作为参数,这个参数就是 parent,也就是父对象指针。这相当于,在创建QObject对象时,可以提供一个其父对象,我们创建的这个QObject对象会自动添加到其父对象的children()列表。当父对象析构的时候,这个列表中的所有对象也会被析构。(注意,这里的父对象并不是继承意义上的父类!)

QWidget是能够在屏幕上显示的一切组件的父类。QWidget继承自QObject,因此也继承了这种对象树关系。一个孩子自动地成为父组件的一个子组件。因此,它会显示在父组件的坐标系统中,被父组件的边界剪裁。例如,当用户关闭一个对话框的时候,应用程序将其删除,那么,我们希望属于这个对话框的按钮、图标等应该一起被删除。事实就是如此,因为这些都是对话框的子组件。

Qt 引入对象树的概念,在一定程度上解决了内存问题。

当一个QObject对象在堆上创建的时候,Qt 会同时为其创建一个对象树。不过,对象树中对象的顺序是没有定义的。这意味着,销毁这些对象的顺序也是未定义的。

任何对象树中的 QObject对象 delete 的时候,如果这个对象有 parent,则自动将其从 parent 的children()列表中删除;如果有孩子,则自动 delete 每一个孩子。Qt 保证没有QObject会被 delete 两次,这是由析构顺序决定的。
在这里插入图片描述
Qt中有内存回收机制, 但是不是所有被new出的对象被自动回收, 满足条件才可以回收。
如果想要在Qt中实现内存的自动回收, 需要满足以下两个条件:

  1. 创建的对象必须是QObject类的子类(间接子类也可以)。QObject类是没有父类的, Qt中有很大一部分类都是从这个类派生出去的。Qt中使用频率很高的窗口类和控件都是 QObject 的直接或间接的子类。其他的类可以自己查阅Qt帮助文档
  2. 创建出的类对象, 必须要指定其父对象是谁, 一般情况下有两种操作方式:
// 方式1: 通过构造函数
// parent: 当前窗口的父对象, 找构造函数中的 parent 参数即可
QWidget::QWidget(QWidget *parent = Q_NULLPTR, Qt::WindowFlags f = Qt::WindowFlags());
QTimer::QTimer(QObject *parent = nullptr);// 方式2: 通过setParent()方法
// 假设这个控件没有在构造的时候指定符对象, 可以调用QWidget的api指定父窗口对象
void QWidget::setParent(QWidget *parent);
void QObject::setParent(QObject *parent);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词