【QT】认识QT


在这里插入图片描述

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值