【QT】认识QT

article/2025/6/7 12:06:31

文章目录

  • 1. 认识Qt
  • 2. 创建QT项目
  • 3. 认识对象树
  • 4. 其它
    • 4.1 窗口坐标系
    • 4.2 快捷键

在这里插入图片描述

1. 认识Qt

  1. 什么是QT

Qt 是⼀个跨平台的C++图形用户界⾯应用程序框架。

  • 它为应用程序开发者提供了建立艺术级图形界⾯所需的所有功能。
  • 它是完全⾯向对象的,很容易扩展。
  • Qt为开发者提供了⼀种基于组件的开发模式,开发者可以通过简单的拖拽和组合来实现复杂的应⽤程序,同时也可以使用C++语言进行高级开发

图形⽤⼾界⾯:指采⽤图形⽅式显⽰的计算机操作⽤⼾界⾯,是计算机与其使⽤者之间的对话接⼝,是计算机系统的重要组成部分

  1. Qt的优点
  • 跨平台,⼏乎⽀持所有的平台;
  • 接口简单,容易上手,学习QT框架对学习其他框架有参考意义。
  • ⼀定程度上简化了内存回收机制;
  • 开发效率⾼,能够快速的构建应⽤程序。
  • 有很好的社区氛围,市场份额在缓慢上升。
  • 可以进行嵌入式开发
  1. Qt的应用场景
  • 桌面应用程序

Qt 能够创建各种类型的桌⾯应⽤程序,包括⽂件管理器、媒体播放器、绘图程序等。Qt应⽤程序⽀持多种操作系统,可以运⾏在Windows、Linux、macOS等桌⾯操作系统上。

  • 移动应用程序

Qt ⽀持Android和IOS移动操作系统,为应⽤程序提供了强⼤的跨平台能⼒。可以使⽤Qt构建各种移动应⽤程序,例如社交应用、游戏、娱乐等。

  • 嵌⼊式系统

Qt 在嵌⼊式领域应用非常广泛,它可以构建⾯向各种设备的图形应⽤程序,在机顶盒、车载娱乐系统、安防监控设备等领域具有⼴泛的应用。

2. 创建QT项目

  1. main.cpp
    在这里插入图片描述

  2. widget.h
    在这里插入图片描述

  3. widget.cpp
    在这里插入图片描述

  4. .pro文件
    在这里插入图片描述

下面我们就使用QT,创建一个打印hello world的窗口

  1. 使用Label
  • 使用可视化窗口

在这里插入图片描述

ui文件中会自动添加

在这里插入图片描述

  • 使用代码

在这里插入图片描述
在上面,我们创建了一个QLabel对象,设置了对象的内容,即可显示出hello world的字符串了

不知道你们时候有这样的疑问:

  1. 为什么要在堆上开辟,并且传递一个指针
  2. 未释放空间,会造成内存泄漏吗?
  1. 在当前widget上创建的对象时,都会传递一个parent指针,将当前创建的对象“挂载”到对象树
  2. 树上的对象,最后应该统一被销毁;如果提前销毁了,控件也就不存在了,界面上也就无法显示。如果是在栈上创建的,则会存在提前销毁的情况

下面我们验证一下空间是否会自动析构释放

在这里插入图片描述

使用自己的MyLabel,代替原来的QLabel,所谓的继承,本质上是拓展,保持原有的功能不变;给对象拓展出也给析构函数,通过这个析构函数,打印一个自定义的日志,方便观察运行效果。

在这里插入图片描述
我们发现确实打印出来了,那就说明析构函数执行了;虽然没有手动delete,但是由于MyLabel挂到了对象树上,当窗口被销毁时,就会自动销毁对象树上的所有对象。

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

3. 认识对象树

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

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

这种机制在 GUI 程序设计中相当有用。例如,⼀个按钮有⼀个 QShortcut(快捷键)对象作为其⼦对象。当删除按钮的时候,这个快捷键理应被删除。这是合理的。

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

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

  • 当⼀个 QObject 对象在堆上创建的时候,Qt 会同时为其创建⼀个对象树。不过,对象树中对象的顺序是没有定义的。这意味着,销毁这些对象的顺序也是未定义的
  • 任何对象树中的 QObject 对象 delete 的时候,如果这个对象有 parent,则⾃动将其从 parent 的 children() 列表中删除;如果有孩⼦,则⾃动 delete 每⼀个孩⼦。
  • Qt 保证没有 QObject 会被 delete 两次,这是由析构顺序决定的

在这里插入图片描述

4. 其它

4.1 窗口坐标系

坐标体系:以左上⻆为原点(0,0),X向右增加,Y向下增加。
在这里插入图片描述
对于嵌套窗口,其坐标是相对于父窗口来说的

在这里插入图片描述

    qDebug() << "this 的坐标为:" << this->x() << " " << this->y();qDebug() << "按钮 的坐标为:" << button->x() << " " << button->y();//this 的坐标为: 500   500
//按钮 的坐标为: 200   200

4.2 快捷键

Qt Creator 中的快捷键

  • 注释:ctrl + /
  • 运⾏:ctrl + R
  • 编译:ctrl + B
  • 字体缩放:ctrl + ⿏标滑轮
  • 查找:ctrl + F
  • 整⾏移动:ctrl + shift + ⬆/⬇
  • 帮助⽂档:F1
  • ⾃动对⻬:ctrl + i;
  • 同名之间的 .h 和 .cpp 的切换:F4
  • ⽣成函数声明的对应定义: alt + enter

在这里插入图片描述


http://www.hkcw.cn/article/tHJWvIqXQS.shtml

相关文章

OpenCV CUDA模块特征检测------角点检测的接口createMinEigenValCorner()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 该函数创建一个 基于最小特征值&#xff08;Minimum Eigenvalue&#xff09;的角点响应计算对象&#xff0c;这是另一种经典的角点检测方法&…

Java高级 | (二十二)快速应用开发框架——Spring Boot

一、使用IDEA搭建SpringBoot项目 二、创建控制器类 1、先运行项目。 如果配置正常&#xff0c;ldea运行界面如下&#xff0c;表示启动正常。 2、创建控制器类 鼠标右击controller包&#xff0c;点击new->Java Class,在弹出的对话框中输入“HelloController”并按回车健&a…

Linux 安装 JDK

Linux中JDK安装 文件路径在root目录&#xff0c;请根据实际情况进行修改 1、上传并解压 tar -zxvf /root/jdk-8u333-linux-x64.tar.gz2、移动解压后的文件夹到/usr/local 目录下&#xff0c; mv /root/jdk1.8.0_333 /usr/local/此步骤可以不操作&#xff0c;但步骤3中的路径…

简简单单探讨下starter

前言 今天其实首先想跟大家探讨下&#xff1a;微服务架构&#xff0c;分业务线了&#xff0c;接入第三方服务、包啥的是否自己定义一个stater更好&#xff1f; 一、starter是什么&#xff1f; 在 Spring Boot 中&#xff0c;Starter 是一种特殊的依赖模块&#xff0c;用于快速…

字符编码全解析:ASCII、GBK、Unicode、UTF-8与ANSI

UTF - 8(全球字符能被唯一标识)、GBK、Unicode、ANSI 区别与关联 qwen模型分词器文件 1. ASCII(基础铺垫,理解编码起源) 作用:最早期为处理英文文本设计,是字符编码的基础,后演变成其他编码兼容的一部分 。范围:共 128 个字符(0 - 127),包含英文大小写字母、数字…

定时线程池失效问题引发的思考

最近在做的一个新功能&#xff0c;在结果探测的时候使用了定时线程池和普通线程池结合&#xff0c;定时线程池周期性创建子任务并往普通线程池提交任务。 问题&#xff1a; 在昨天测试老师发现&#xff0c;业务实际上已经成功了&#xff0c;但是页面还是一直显示进行中。 收到…

Win11/Win10 打不开 gpedit.msc 之 组策略编辑器安装

目前已整理两种方式&#xff0c;推荐使用第二种方式~ 方式1&#xff1a; 一般家庭版操作系统默认未安装 组策略编辑器&#xff0c; 只需要进行安装一下即可。 到文章结尾按照提示下载相关的bat文件&#xff0c; 下载后右键以管理员身份运行bat文件&#xff0c;&#xff08…

无人机甲烷检测技术革新:开启环境与能源安全监测新时代

市场需求激增&#xff0c;技术革新势在必行 随着全球气候变化加剧&#xff0c;甲烷作为第二大温室气体&#xff0c;其减排与监测成为国际社会关注焦点。据欧盟甲烷法规要求&#xff0c;2024 年起欧洲能源基础设施运营商需定期测量甲烷排放并消除泄漏。与此同时&#xff0c;极端…

谷歌地图手机版(Google maps)v11.152.0100安卓版 - 前端工具导航

谷歌地图(Google maps)是由谷歌官方推出的一款手机地图应用。软件功能强大&#xff0c;支持本地搜索查找世界各地的地址、地点和商家&#xff1b;支持在街景视图中查看世界各地的360度全景图&#xff1b;支持查找乘坐火车、公交车和地铁的路线&#xff0c;或者查找步行路线等 …

H5动态文字效果开发经验分享

这里写目录标题 一、效果介绍二、实现原理与代码解析1. 打字机效果实现2. 渐变文字动画实现 三、开发经验与技巧1. 性能优化2. 兼容性处理3. 用户体验提升 四、应用场景五、扩展思路 一、效果介绍 我们实现了两种常见且实用的文字动效&#xff1a; 打字机效果 &#xff1a;文…

春雪食品×MTC AI助手:创新驱动再升级,效率革命正当时!

当农牧食品企业遇上AI“助手”&#xff0c;会碰撞出怎样的火花&#xff1f;5月26日&#xff0c;春雪食品集团总部迎来了一场特别的签约仪式——携手MTC麦汇信息&#xff0c;共同探索AI数字化之路。春雪食品总裁郑钧、副总裁黄仕敏&#xff0c;MTC麦汇信息董事长卢富平、副总裁徐…

Abaqus连接器弹片正向力分析:

.学习重点: • 外部幾何匯入。 • 建立解析剛性面。 • 利用Partition與局部撒點來提高網格品質。 • 材料塑性行為(材料非線性)。 • 考慮大變形(幾何非線性)。 • 接觸(邊界非線性)。 • 平移組裝。 • 設定輸出參數。 • 討論Shear Locking & Hourglassing效應。 1) 設…

力扣刷题 -- 225. 用队列实现栈

1. 题目 2. 思路分析 思路&#xff1a;1)往非空队列里插入数据&#xff08;入队列&#xff09;&#xff1b; 2&#xff09;将非空队列的前size-1个元素挪到空队列&#xff1b; 3&#xff09;将非空队列的队尾元素出队列&#xff0c;并返回栈顶元素。 3. 代码实现 typedef …

【设计模式-4.7】行为型——备忘录模式

说明&#xff1a;本文介绍行为型设计模式之一的备忘录模式 定义 备忘录模式&#xff08;Memento Pattern&#xff09;又叫作快照模式&#xff08;Snapshot Pattern&#xff09;或令牌模式&#xff08;Token Pattern&#xff09;指在不破坏封装的前提下&#xff0c;捕获一个对…

ADRV9026 JESD204C测试

ADRV9026在650MHz到6GHz的宽频率范围内工作。 接收器通道支持高达200MHz的带宽&#xff0c; 数据传输速率高达24.33 Gbps&#xff0c; 可跨&#xff08;最多&#xff09; 四个JESD204B/JESD204C通道传输。 发射机信道在与接收机相同的频率范围内工作。 每个发射机信道支持高达4…

压缩格式未知或数据损坏:如何应对压缩包无法打开的情况

压缩包在日常工作和生活中非常常见&#xff0c;用于节省空间并方便文件传输。然而&#xff0c;用户在尝试解压文件时&#xff0c;有时会遇到诸如“压缩格式未知”或“数据已损坏”等错误信息。 这种情况可能导致文件无法打开&#xff0c;影响工作效率甚至造成数据丢失。本文将…

升级:用vue canvas画一个能源监测设备和设备的关系监测图!

用vue canvas画一个能源电表和设备的监测图-CSDN博客 上一篇文章&#xff0c;我是用后端的数据来画出监测图。这次我觉的&#xff0c;用前端来控制数据&#xff0c;更爽。 本期实现功能&#xff1a; 1&#xff0c;得到监测设备和设备的数据&#xff0c;然后进行存库 2&…

《数据挖掘》- 房价数据分析

这里写目录标题 采用的技术1. Python编程语言2. 网络爬虫库技术点对比与区别项目技术栈的协同工作流程 代码解析1. 导入头文件2. 读取原始数据3. 清洗数据4. 数据分割4.1 统计房屋信息的分段数量4.2 将房屋信息拆分为独立列4.3 处理面积字段4.4 删除原始房屋信息列 5. 可视化分…

Axure-元件流程图

Axure-02 线框图元件使用 目标 元件基本介绍 基础元件的使用 表单型元件的使用 菜单与表格元件的使用 案例&#xff1a;个人简历表 元件基本介绍 概述 在Axure RP中&#xff0c;元件是构建原型图的基础模块。 将元件从元件库里拖拽到画布中&#xff0c;即可添加元件到你…

深入解析ReactJS中JSX的底层工作原理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…