当前位置: 首页 > news >正文

【QT】认识QT

文章目录

  • 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

在这里插入图片描述

相关文章:

  • 帝可得 - 设备管理
  • 【C/C++】初步了解享元模式
  • 小黑一步步探索大模型应用:langchain中AgentExecutor的call方法初探demo(智能体调用)
  • React从基础入门到高级实战:React 高级主题 - React 微前端实践:构建可扩展的大型应用
  • AtCoder Beginner Contest 408(ABCDE)
  • 机器学习——随机森林算法
  • [蓝桥杯]上三角方阵
  • 5. Qt中.pro文件(1)
  • easylogger的移植使用
  • 在linux系统上搭建git服务器(ssh协议)
  • 【理解软件开发中的“向后兼容“与“向前兼容“】
  • 每日算法-250603
  • 龙虎榜——20250603
  • C语言学习—数据类型20250603
  • FreeRTOS,其发展历程详细时间线、由来、历史背景
  • Vue.js 后台管理系统
  • 如何写一条高效分页 SQL?
  • 把两个标签内容显示在同一行
  • Semi-Supervised Neuron Segmentation via Reinforced Consistency Learning
  • non-autoregressive sequence generation
  • 盐城网站建设制作工作室/信阳搜索引擎优化
  • 包装设计的网站/滨州seo招聘
  • 配送系统网站怎么做/深圳做网站的公司有哪些
  • 淄博做网站的公司有哪些/登录百度
  • 手机网站支持微信支付吗/寄生虫seo教程
  • wordpress lensnews/关键词的优化方法