【QT】QT环境搭建

【QT】QT环境搭建QT QT 环境搭建 qt 安装

大家好,欢迎来到IT知识分享网。

本专栏内容为:QT学习专栏 通过本专栏的深入学习,你可以了解并掌握QT。

QT环境搭建

开发环境

在安装QT环境之前,我们首先要明确一点:

我们需要安装三部分

  1. c++编译器(这里指的不是Visual Studio而是g++,cl.exe)
  2. QTSDK

在这里插入图片描述

  1. 需要有一个QT的集成开发环境(IDE)

集成开发环境我们介绍三种:

在这里插入图片描述

QtCreator

QtCreator是⼀个轻量级的跨平台集成开发环境(IDE),专为使⽤Qt框架进⾏应⽤程序开发⽽设
计。

咱们后续的课程中使⽤QtCreator开发Qt程序.

VisualStudio

Eclipse

但是呢,说是安装三个,其实只要安装一个QTSDK,剩下两个也都有了

下载QTSDK

下载QTSDK,首选官网:

Try Qt | Develop Applications and Embedded Systems | Qt

当然,小编已经将QTSDK安装包保存在网盘当中,可以直接进行网盘下载:

QTSDK的安装

在这里插入图片描述

2、双击之后进⼊如下界⾯:

在这里插入图片描述

3、选择安装路径时不能出现中⽂路径,否则即使安装上也⽆法使⽤;

在这里插入图片描述

在这里插入图片描述

5、选择部分组件;说明:其他未安装的组件在使⽤时可以另⾏添加

在这里插入图片描述

在这里插入图片描述

6、同意安装协议;

在这里插入图片描述

7、下⼀步;

在这里插入图片描述

8、点击”安装”进⼊安装界⾯;

在这里插入图片描述

9、安装界⾯如下:

在这里插入图片描述

10、点击”完成”按钮完成安装;

在这里插入图片描述

验证QtSDK安装是否成功

1、双击打开QtCreator⼯具,并进⼊到”欢迎模式”下的”⽰例”界⾯;

在这里插入图片描述

2、在”⽰例”中任选其中⼀个,单击打开该⽰例。在单击之后会弹出⼀个窗⼝,关闭即可;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如果能构建并运⾏,说明安装⽆误。运⾏结果如下图

在这里插入图片描述

Qt环境变量配置

1、找到Qt的安装路径,复制”bin”路径;

在这里插入图片描述

2、“此电脑”——>⿏标右键,“属性”——>“⾼级系统设置”——>“环境变量”

在这里插入图片描述

3、“新建”——>填⼊”bin”路径——>“确定”;

在这里插入图片描述

4、注意:在关掉所有窗⼝时,⼀定要点击”确定”,否则上述配置⽆效。

为什么要设置环境变量

在这里插入图片描述

初始QT Creator

安装完我们的QT SDK后,在应用程序上会显示一下这些:

在这里插入图片描述

这每一个都有什么含义呢?

在这里插入图片描述

QtCreator概览

从开始菜单或者快捷⽅式打开QtCreator集成开发环境,启动之后看到类似下⾯的界⾯:

在这里插入图片描述

①:菜单栏。菜单栏⼀共有8个菜单选项,包含了常⽤的功能菜单:

⽂件 包含了新建、打开、关闭项⽬和⽂件、打印和退出等基本功能
编辑 包含了撤销、剪切、复制、查找和选择编码等功能
构建 包含构建和运⾏项⽬等相关功能。
调试 包含调试运⾏项⽬等相关功能。
Analyze 包含QML分析器、Valgrind内存和功能分析器等相关功能。
⼯具 提供了快速定位菜单、外部⼯具菜单等。这⾥的选项菜单中包含了QtCreator各个⽅⾯的设置选 项:环境设置、⽂本编辑器设置、帮助设置、构建和运⾏设置、调试器设置和版本控制设置等。
控件 包含了设置窗⼝布局的⼀些菜单,如全屏显⽰和隐藏边栏功能等。
帮助 包含Qt帮助、QtCreator版本信息、报告bug和插件管理等菜单。

②:模式选择;

欢迎模式 主要提供了⼀些功能的快捷⼊⼝,如打开帮助教程、打开⽰例程序、打开项⽬、新建项⽬、快速打 开以前的项⽬和会话、联⽹查看Qt官⽅论坛和博客等。⽰例⻚⾯显⽰了Qt⾃带的⼤量⽰例程序, 并提供了搜索栏从⽽实现快速查找;教程⻚⾯提供了⼀些视频教程资源,但是是英⽂的。
编辑模式 主要⽤来查看和编辑程序代码,管理项⽬⽂件。QtCreator中的编辑器具有关键字特殊颜⾊显⽰、 代码⾃动补全、声明定义间快捷切换、函数原型提⽰、F1键快速打开相关帮助和全项⽬中进⾏查找 等功能。也可以在”⼯具—->选项”菜单中对编辑器进⾏设置。
设计模式 整合了QtDesigner的功能。可以设计图形界⾯,进⾏部件属性设置、信号和槽设置、布局设置等 操作。
调试模式 ⽀持设置断点、单步调试和远程调试等功能,包含局部变量和监视器、断点、线程以及快照等查看 窗⼝。
项⽬模式 包含对特定项⽬的构建设置、运⾏设置、编辑器设置、代码⻛格设置和依赖关系等⻚⾯。构建设置 中可以对项⽬的版本、使⽤的Qt版本和编译步骤进⾏设置;编辑器设置中可以设置⽂件的默认编 码;在代码⻛格设置中可以设置⾃⼰的代码⻛格。
帮助模式 在帮助模式中将Qt助⼿整合了进来,包含⽬录、索引、查找和书签等⼏个导航模式,可以在帮助中 查看Qt和QtCreator的各⽅⾯信息。
⽬标选择器 ⽬标选择器⽤来选择要构建哪个项⽬、使⽤哪个Qt库、这对于多个Qt库的项⽬很有⽤。还可以 选择编译项⽬的debug版本或是release版本。
运⾏按钮 运⾏按钮可以实现项⽬的构建和运⾏;
调试按钮 运⾏按钮可以实现项⽬的调试;
构建按钮 构建按钮完成项⽬的构建。

④:欢迎模式下的窗⼝⼯作⽅式。

Project ⽤来新建⼯程、打开⼯程
⽰例 Qt官⽅的⼀些⽰例
教程 Qt官⽅教程
问题 问题窗⼝显⽰程序编译时的错误和警告信息;
SearchResults 搜索结果窗⼝显⽰执⾏了搜索操作后的结果信息;
应⽤程序输出 应⽤程序窗⼝显⽰应⽤程序运⾏过程中输出的所有信息;
编译输出 编译输出窗⼝显⽰程序编译过程输出的相关信息;

⑦:会话记录;可以对会话进⾏管理,包括Clone。如果没打开⼯程,则显⽰的是最后⼀次打开的
(会话)⼯程,否则,显⽰当前的会话(⼯程)。
⑧:新建项⽬;
⑨:打开已有项⽬;


使⽤QtCreator新建项⽬

新建项⽬

在这里插入图片描述

选择项⽬模板

弹出如下对话框:

在这里插入图片描述

新建项⽬对话框⾥有五类项⽬模板

项⽬模板 说明
Application Qt应⽤程序,包括普通窗体程序和QtQuick程序
Library 可以创建动态库、静态库以及QtQuick扩展插件、QtCreator⾃⾝插件
其他项⽬ 可以创建单元测试项⽬、Qt4设计师⾃定义控件、⼦⽬录项⽬等
Non-Qt-Project ⾮Qt项⽬。可以创建纯C或纯C++项⽬
ImportProject 导⼊项⽬。从版本控制系统管理的软件项⽬导⼊旧的项⽬

在这里插入图片描述

选择不同的项⽬模板,QtCreator就会在后续项⽬创建好了之后⽣成不同的基础代码.

选择项⽬路径

给Qt项⽬命名及选择保存项⽬的路径;

在这里插入图片描述

选择构建系统

选择Qt项⽬的构建系统,使⽤默认的”qmake”即可。

在这里插入图片描述

Qt中的构建⼯具有三种可供选择,分别是:qmake、CMake、Qbs,下⾯依次介绍。

• qmake:qmake是⼀个构建⼯具(buildtool),⽤于⾃动⽣成makefile⽂件。qmake⽀持跨平
台构建。qmake编辑的是⼀个后缀名为.pro的⽂件。
• CMake:CMake是⼀个跨平台的构建⼯具。CMake本⾝不是⼀个编译器,其实就是⽣成⼀个让编
译器能读懂编译流程的⽂件⼯具。让CMake⾃动⽣成构建系统,例如Makefile和VisualStudio
项⽬⽂件。CMake是⼀个第三⽅⼯具,有⾃⼰的⽂档。
• Qbs:Qbs(QtBuildSuite:Qt构建套件)同qmake、CMake⼀样都是构建⼯具。Qbs号称是新
⼀代的构建⼯具,⽐qmake编译速度更快。Qbs没有绑定Qt版本,它从项⽬⽂件的⾼级项⽬描述
中⽣成⼀个正确的依赖表。⽽传统的MakeFile⽣成⼯具如qmake和CMake,其在⽣成MakeFile
⽂件后将实际的命令交给Make⼯具去执⾏。







在这里插入图片描述

填写类信息设置界⾯

在这里插入图片描述

对于基类的选择,⽬前有三种基类:

基类 说明
QMainWindo w 主窗⼝类,⼀般⽤于较为复杂的应⽤程序,除了中央客⼾区界⾯,还包括菜单栏、⼯具栏、 状态栏以及多个可停靠的⼯具对话框等
QWidget 最简单、最基本的窗体程序,⾥⾯可以放置多个控件实现程序功能
QDialog 基于对话框的程序,对话框⼀般⽤于弹窗,也可以⽤于主界⾯显⽰。对话框是从QWidget继 承⽽来的,并丰富了⼀些功能,如模态显⽰和返回值等

上述三个类之间的关系如下图

在这里插入图片描述

在这里插入图片描述

选择语⾔和翻译⽂件

在这里插入图片描述

由于我们暂时不考虑国际化问题,直接下⼀步即可.

选择Qt套件

在这里插入图片描述

选择版本控制系统

在这里插入图片描述

如果想把代码提交到码云或者github,可以在此处选择git作为版本控制系统.

💡 ⼤家千万不要觉得⿇烦.事实上在⼤家熟练了之后,创建⼀个项⽬花的时间不会超过10秒钟.

项⽬创建完成之后,QtCreator会直接进⼊代码编辑模式,可以看到类似下图界⾯:

在这里插入图片描述

认识QtCreator界⾯

左边栏

在这里插入图片描述

在编辑模式下,左边竖排的两个窗⼝叫做”边栏”。①是项⽬⽂件管理窗⼝,②是打开⽂件列表窗⼝。

在这里插入图片描述

在这里插入图片描述

视图类型 说明
项⽬ 即项⽬⽂件管理视图,可以选择项⽬⾥的⽂件进⾏编辑,包括pro⽂件也可以⼿动编辑。
打开⽂档 当前已经打开的⽂件列表,⽂件名右边如果有*号,是该⽂件被修改了但尚未保存。
书签 右击代码编辑器⾏号位置,看到”切换书签”,可以给代码⾏添加书签,⽅便跳转到该位 置。
⽂件系统 相当于系统⾥的⽂件资源管理器,可以查看项⽬⽂件夹在磁盘⾥的实际⽂件列表。
类视图 可以查看项⽬⾥包含的类及相应源代码⽂件⾥的成员函数、成员变量。
GitBranches 查看当前分⽀
⼤纲 编辑器所显⽰的当前⽂件的⼤纲列表,如名字空间、类名、成员函数、成员变量等。
Tests 测试
类型层次 当前项⽬包含的类及其基类、派⽣类列表。
Include Hierarchy 包含视图,显⽰当前项⽬⾥*.h、*.cpp以及Qt类库头⽂件之间的包含关系。

代码编辑区

在这里插入图片描述

①和②:导航按钮”返回”和”前进”,这与⽹⻚浏览器的前进和后退按钮类似,可以在之前浏览的多个
代码⽂件或⼀个代码⽂件⾥多个位置之间快速切换。
:标识当前显⽰的⽂件是只读还是可写,⼀般都是可写的。
:⽂件类型图标,当前显⽰⽂件的类型,这个控件其实是⼀个菜单按钮,点击可以弹出丰富的⽂件
处理功能菜单。
:打开的⽂件名,可以在多个打开的⽂件之间选择切换,与边栏的”打开⽂档”视图是对应的。
:关闭当前显⽰的⽂档。
:为当前显⽰的⽂件添加额外的C++预处理指令,⼀般⽤不着。
:选择符号,可以在当前显⽰的⽂件⾥多个函数、类、成员变量等之前快速切换,与边栏”⼤纲”视
图是对应的。
:编辑区光标的⾏号和列号。
:代码编辑区分栏,可以增加多个编辑器窗⼝,显⽰多个打开的⽂档或显⽰较⼤源码⽂件的多个位
置。











⾏⾸区:主要⽤来显⽰代码⾏号,以及调试断点标志和代码书签标志。右击⾏⾸区可以弹出右键菜
单,菜单⾥可以切换书签、编辑书签以及设置或取消断点。
同⼀⾏是既可以打断点也可以设置书签的,⼆者不冲突,其实它们根本就没关系。单击⾏号前⾯的浅
灰⾊空⽩区可以直接打断点,再次单击可以取消断点,另外也可以⽤快捷键F9设置或取消断点。代码


书签⼀般⽤右键菜单来设置,也可以⽤快捷键Ctrl+M设置或取消书签。

编辑区:写代码的区域。

UI设计界⾯

双击widget.ui⽂件,QtCreator会⾃动进⼊设计模式,可以对图形界⾯进⾏可视化编辑:

在这里插入图片描述

①:组件选择窗⼝。组件选择窗⼝分为多个组,如Layouts、Buttons、DisplayWidgets等,界⾯设
计的常⻅组件都可以在组件选择窗⼝中找到。
②:UI设计窗⼝。如果要将某个组件放置到该窗⼝上时,从组件选择窗⼝上拖放⼀个组件到窗体上即
可。
③:动作编辑窗⼝。动作编辑窗⼝包括ActionEditor以及Signals和Slots编辑器。ActionEditor主
要是⽤来新建Action,并且通过拖拽的动作,将新建好的Action添加到菜单栏和⼯具栏上;Signals
和Slots编辑器⽤于可视化地进⾏信号与槽的关联。
④:对象浏览窗⼝。⽤树状视图显⽰窗体上各组件之间的布局包含关系,视图有两列,显⽰每个组件
的对象名称(ObjectName)和类名称。
⑤:属性设置窗⼝。显⽰某个选中的组件或窗体的各种属性及其取值,可以在属性设置窗⼝⾥修改这
些属性的值。









构建区

在这里插入图片描述

在这里插入图片描述

这⾥有三种构建模式:

模式 说明
Debug 以”-g”模式编译,带着符号信息,优点是便于调试
Profile profile则是在”Debug”和”Release”之间取⼀个平衡,兼顾性能和调试,可以类似的看做是性能更 优⼜⽅便调试的版本。
Release “Release”是经过优化之后,性能⽐”Debug”更上⼀个档次

上图是针对项⽬只⽤到单⼀Qt套件的,如果之前配置了多个Qt套件,看到的类似下图:

在这里插入图片描述

• 第⼆个是运⾏按钮,快捷键是Ctrl+R,如果还没构建项⽬或刚修改了代码,直接点击运⾏的话,
QtCreator会⾃动构建⽣成新的⽬标程序并运⾏。
• 第三个是调试按钮,快捷键是F5。调试程序之前,QtCreator会⾃动构建⽣成最新的⽬标程序,并
进⼊调试模式。
• 第四个是构建按钮,快捷键是Ctrl+B,只构建最新的⽬标程序,但不运⾏。



项⽬⽂件解析

项目建立好后,我们可以看到一下几个文件,接下来,我们将逐个详细讲解。

在这里插入图片描述

main.cpp⽂件解析

使⽤QtCreator新建任意⼯程之后,main.cpp⽂件中都会⾃动⽣成如下代码:

#include "widget.h" #include <QApplication> int main(int argc, char *argv[]) { 
    QApplication a(argc, argv); Widget w; w.show(); return a.exec(); } 

在这里插入图片描述

解释:

\1. Qt系统提供的标准类名声明头⽂件没有.h后缀;

\2. Qt⼀个类对应⼀个头⽂件,类名就是头⽂件名;

\3. QApplication为应⽤程序类;QApplicationa;(a为应⽤程序对象,有且仅有⼀个。)

⚫QApplication管理图形⽤⼾界⾯应⽤程序的控制流和主要设置。

\4. myWidgetw;//实例化窗⼝对象

\5. w.show();//调⽤show函数显⽰窗⼝

在这里插入图片描述

就好比:

在这里插入图片描述

widget.h ⽂件解析

#ifndef WIDGET_H #define WIDGET_H #include <QWidget> QT_BEGIN_NAMESPACE namespace Ui { 
    class Widget; } QT_END_NAMESPACE class Widget : public QWidget { 
    Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); private: Ui::Widget *ui; }; #endif // WIDGET_H 

在这里插入图片描述

widget.cpp ⽂件解析

widget.cpp⽂件是类Widget的实现代码,所有在窗体上要实现的功能添加在此⽂件中;

#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { 
    ui->setupUi(this); } Widget::~Widget() { 
    delete ui; } 

在这里插入图片描述

widget.ui⽂件解析

在这里插入图片描述

在这里插入图片描述

.pro⽂件解析

在这里插入图片描述

双击进⼊该⽂件,该⽂件的核⼼内容如下:

QT += core gui //Qt包含的模块 greaterThan(QT_MAJOR_VERSION, 4): QT += widgets//⼤于Qt4版本才包含widget模块 CONFIG += c++11 # The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if it uses deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp \ widget.cpp//源⽂件 HEADERS += \ widget.h FORMS += \ widget.ui # Default rules for deployment. qnx: target.path = /tmp/$${ 
   TARGET}/bin else: unix:!android: target.path = /opt/$${ 
   TARGET}/bin !isEmpty(target.path): INSTALLS += target 

“.pro”⽂件的写法如下:

  1. 注释:从”#”开始,到这⼀⾏结束。
  2. QT+=coregui//Qt包含的模块Qt5包含的模块如下图所⽰:

    在这里插入图片描述

\4. 指定⽣成的应⽤程序名:TARGET=QtDemo

app:建⽴⼀个应⽤程序的makefile。这是默认值,所以如果模板没有被指定,这个将被使
⽤。


lib
:建⽴⼀个库的makefile。
vcapp:建⽴⼀个应⽤程序的VisualStudio项⽬⽂件。
vclib:建⽴⼀个库的VisualStudio项⽬⽂件。
subdirs:这是⼀个特殊的模板,它可以创建⼀个能够进⼊特定⽬录的makefile并且为它调⽤
make的makefile。
\6. ⼯程中包含的源⽂件:SOURCES+=main.cpp/widget.cpp
\7. ⼯程中包含的头⽂件:HEADERS+=widget.h
\8. ⼯程中包含的资源⽂件:RESOURCES+=painter.qrc
\9. ⼯程中包含的”ui”设计⽂件:FORMS+=widget.ui
\10. 配置信息:CONFIG+=c++11(使⽤c++11的特性)CONFIG⽤来告诉qmake关于应⽤程序的配
置信息。









Qt编程注意事项

Qt中的命名规范

💡 Qt偏好驼峰命名法.这⼀点不像咱们之前课堂上偏好蛇形命名.

QtCreator中的快捷键

使⽤帮助⽂档

在这里插入图片描述

点击”帮助”之后,出现如下图⽰界⾯:

在这里插入图片描述

3、找到QtCreator的安装路径,在”bin”⽂件夹下找到assistant.exe,双击打开;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

划重点:

QtHelloWorld程序

使⽤”按钮”实现

使⽤图形化方式实现

(1)双击:”widget.ui”⽂件;

在这里插入图片描述

2)拖拽控件⾄ui界⾯窗⼝并修改内容;

在这里插入图片描述

(3)构建并运⾏,效果如下所⽰:

在这里插入图片描述

使用纯代码实现、

一般通过代码来构造界面的时候,通常会把构造界面的代码放到 Widget/MainWindow 的构造函数中

在这里插入图片描述

#include "widget.h" #include "ui_widget.h" #include <QPushButton>//添加“按钮”控件的头文件 Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { 
    ui->setupUi(this); QPushButton *btn=new QPushButton;//创建按钮 btn->setText("hello QT ");//显示hello QT btn->setParent(this);//将按钮置于窗口上 } Widget::~Widget() { 
    delete ui; } 

实现效果如下图:

在这里插入图片描述

使⽤”标签”实现

图形化方式实现

1)双击:”widget.ui”⽂件;

在这里插入图片描述

2)拖拽”标签”⾄UI设计界⾯中,并双击修改标签内容;

在这里插入图片描述

在这里插入图片描述

纯代码⽅式实现
#include "widget.h" #include "ui_widget.h" #include <QPushButton>//添加“按钮”控件的头文件 #include <QLabel>//添加“标签头文件” #include <QFont>//添加“字体”头文件 Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { 
    ui->setupUi(this); //QPushButton *btn=new QPushButton;//创建按钮 //btn->setText("hello QT ");//显示hello QT //btn->setParent(this);//将按钮置于窗口上 QLabel *lab = new QLabel(this);//创建标签 lab->setText("中华人民共和国万岁");//设置标签内容 setFixedSize(1000,900);//设置窗口大小 //设置字体 QFont font("华文行楷",64); lab->setFont(font); //设置标签内容显示的位置 lab->move(20,300); //设置标签字体颜色 lab->setStyleSheet("color:blue"); } Widget::~Widget() { 
    delete ui; } 

在这里插入图片描述

补充知识:

在这里插入图片描述

在上述代码中,在标签填入信息时:

在这里插入图片描述

会提示一个Qsring的提示信息。Qstring是什么呢?

Qt 诞生于 1991 年.c++还没有形成标准.

C++更没有”标准库”这样的改变了

然后呢

在这里插入图片描述

其实呢,在上述创建对象的时候,我们有两种办法:

第一种:在堆上建立

QLabel *lab = new QLabel(this);//创建标签 

第二种:在栈上建立

//在栈上 QLabel label(this); 

但实际上,我吗们更推荐在堆上建立,其次这两个还会有个问题,那就是内存泄漏问题。

内存泄漏问题

提起内存泄漏问题,那可是很严重的。

关注 内存泄露 是要融入到 DNA 中的事情内存泄露是一个非常害怕,非常严重的事情!!(不仅仅是内存泄露,包括文件描述符泄露 等 同类问题, 都是非常严重的)

这种问题,不容易第一时间发现

(但是如果生产环境挂了,用户就访问不了了,非常严重的事故!!)

在这里插入图片描述

在这里插入图片描述

要是真这样,那很有可能我的年终奖就没了,甚至可能丢到工作。

现在言归正传,为什么我们推荐在堆上创建的方式呢?

在这里插入图片描述

那么什么是对象树呢?

对象树

提起对象树,前端开发(网页开发)也涉及到 类似的 对象树 (DOM).本质上也是一个树形结构 (N 叉树),通过树形结构把界面上的各种元素组织起来.

QT中也是类似,也是搞了一个对象树,也是 N 又树,把界面上的各种元素组织起来了

对象树:

在这里插入图片描述

在Qt中创建很多对象的时候会提供⼀个Parent对象指针,下⾯来解释这个parent到底是⼲什么的。

• QObject是以对象树的形式组织起来的。

• QWidget是能够在屏幕上显⽰的⼀切组件的⽗类。
◦ QWidget继承⾃QObject,因此也继承了这种对象树关系。⼀个孩⼦⾃动地成为⽗组件的⼀
个⼦组件。因此,它会显⽰在⽗组件的坐标系统中,被⽗组件的边界剪裁。例如,当⽤⼾关闭
⼀个对话框的时候,应⽤程序将其删除,那么,我们希望属于这个对话框的按钮、图标等应该
⼀起被删除。事实就是如此,因为这些都是对话框的⼦组件。
◦ 当然,我们也可以⾃⼰删除⼦对象,它们会⾃动从其⽗对象列表中删除。⽐如,当我们删除了
⼀个⼯具栏时,其所在的主窗⼝会⾃动将该⼯具栏从其⼦对象列表中删除,并且⾃动调整屏幕
显⽰。






Qt引⼊对象树的概念,在⼀定程度上解决了内存问题。
• 当⼀个QObject对象在堆上创建的时候,Qt会同时为其创建⼀个对象树。不过,对象树中对象的
顺序是没有定义的。这意味着,销毁这些对象的顺序也是未定义的。
• 任何对象树中的QObject对象delete的时候,如果这个对象有parent,则⾃动将其从parent的
children()列表中删除;如果有孩⼦,则⾃动delete每⼀个孩⼦。Qt保证没有QObject会被
delete两次,这是由析构顺序决定的。
如果QObject在栈上创建,Qt保持同样的⾏为。正常情况下,这也不会发⽣什么问题。来看下⾯的代
码⽚段:
在这里插入图片描述







在这里插入图片描述

💡 在Qt中,尽量在构造的时候就指定parent对象,并且⼤胆在堆上创建。

在这里插入图片描述

2、选中⼯程名,⿏标右键——->“addnew…”(或”添加新⽂件”)

在这里插入图片描述

在这里插入图片描述

3、选择”choose…”,弹出如下界⾯;

在这里插入图片描述

4、点击”下⼀步”,弹出如下对话框;

在这里插入图片描述

5、点击”完成”之后,⼿动创建类的头⽂件以及源⽂件会⾃动添加到⽬标⼯程中;

在这里插入图片描述

6、修改头⽂件;

在这里插入图片描述

7、编写源⽂件;

在这里插入图片描述

8、编译并运⾏;

在这里插入图片描述

9、当关闭弹出的对话框时,就会⾃动调⽤按钮的析构函数;

在这里插入图片描述

10、观察析构函数的执⾏顺序;

在这里插入图片描述

11、执⾏结果:

在这里插入图片描述

Qt窗⼝坐标体系

坐标体系:以左上⻆为原点(0,0),X向右增加,Y向下增加。

在这里插入图片描述

在这里插入图片描述

运⾏结果如下图⽰:

在这里插入图片描述

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/119340.html

(0)
上一篇 2025-11-06 10:26
下一篇 2025-11-06 10:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信