初识QT(上篇):What Qt

初识QT(上篇):What Qt

  • 前言 & 说明
    • 前言
    • 说明
  • 初识QT
    • 1.1 QT的what
      • 1. 介绍
      • 2. 发展历程
      • 3. QT架构的主要内容
      • 4.QT的常用模块
    • 1.2 QT的 why
      • 1. QT的核心机制
    • 下篇笔记链接

前言 & 说明

前言

前言: 之前说要share的qt相关知识,我终于来同步博客了!
why笔记与博客不同步:因为从我自己的笔记同步过来会有格式调整和相关的知识maybe会扩充,而且写的角度不同,所以更新并不是同步的。
更新章节安排:博客我打算按照每个章节来更新:具体可以看我之前笔记的目录。这里直接看我的QT八股系列笔记
2W字-35页PDF谈谈自己对QT某些知识点的理解
在这里插入图片描述

说明

下面是我部分项目的相关记录,所以我对QT知识点的理解也是从项目本身可能涉及到的知识点整理。所以如果有不对的地方,也欢迎大家指正。
在这里插入图片描述

初识QT

这里与八股系列笔记不同,笔者我这篇笔记主要是用来简单的介绍什么是QT,也就是初识QT啦。其中更多知识我会编排在我的QTB股系列笔记中,感兴趣的童鞋再去我的八股系列笔记中看吧。(PS:下面PPT是自己做的,八股系列我不会更新PPT系列笔记)

在这里插入图片描述

这里主要会介绍一下QT,QT的核心机制及一些常用的类的相关知识点。

同样地,笔者我也是把其分为上中下三个篇章
上篇主要介绍whatQt(也就是Qt是上面,相关的发展历程及常用的模块及主要的内容)以及why Qt的开头介绍。

在这里插入图片描述

1.1 QT的what

在这里插入图片描述
首先,先大概了解一下QT是什么。( ps: 后面1.3会讲QT与其他框架的区别 )

1. 介绍

在这里插入图片描述Qt 是一个跨平台的C++的 GUI 应用程序开发框架,可以适用于绝大多数操作系统和设备,包括Windows、Linux 和 macOS 等桌面设备,Android、IOS、WP等移动设备、MCU等。可以支持GUI程序和非GUI程序(如控制台工具和服务器)等的开发,是完全面向对象的框架,容易扩展,并且允许真正的组件编程

  • 思考1:为什么QT可以跨平台,底层是什么在做支撑?
    核心在于QT所支持的平台底层API上:

    • 抽象底层操作系统接口,同时提供相应的平台相关模块
    • 提供一致的API层
    • 预编译和预打包技术
      在这里插入图片描述
      其中,GDI是Windows下图形绘制及显示的主要API,Carbon是Mac OS X下应用程序开发环境。
      注:GDI是集成到Windows内核的,而X Windows只是Linux系统的应用软件
  • 思考2:作为一种组件化编程框架,QT与React的区别在哪里?

    1. QT是基于C++的,而React是基于JS的
    2. QT更加适用于需要更高性能、底层控制和跨平台支持的应用,特别是涉及到桌面应用和嵌入式系统开发;
      而且React则更加适用于Web和移动端应用的开发,尤其是在快速构建响应式用户界面方面的表现比较出色。
  • 思考3:QT与C++的关系
    Qt是一个基于C++的跨平台应用程序开发框架。Qt通过使用C++语言进行开发,并提供了许多特殊的功能和机制,以便更好地满足应用程序开发的需求。以下是Qt与C++之间的关系:

    • 基于C++语言实现:Qt是使用C++语言开发的,因此开发人员可以使用C++的所有功能和特性,例如强类型、面向对象编程、模板和运算符重载等。开发人员可以通过C++来定义和实现自定义的类、数据结构和算法,以及处理业务逻辑和应用程序的行为。
    • 跨平台性:C++具有出色的跨平台性,而Qt框架则进一步加强了这一特性。Qt提供了一致的API和功能,可以轻松地编写一次代码,然后在不同的平台上进行编译和运行,包括Windows、macOS、Linux、iOS和Android等。因此,开发人员可以使用C++和Qt来构建可移植的跨平台应用程序。
    • 提供丰富的功能和工具:Qt为C++开发人员提供了丰富的功能和工具,使得开发大型应用程序变得更加容易。其中包括GUI开发、图形渲染、多线程、网络通信、数据库访问、XML处理等。Qt还提供了许多开发人员友好的工具和IDE,如Qt Creator,以帮助开发人员更高效地开发和调试应用程序。
    • 对C++进行了扩展和封装:Qt框架对C++进行了扩展和封装,提供了许多特殊的功能和机制。其中包括信号槽机制、元对象系统、属性系统、事件处理、并发编程等。这些功能和机制使得开发人员能够以更直观、高效的方式编写应用程序,并提高应用程序的可维护性和可扩展性。
    • 广泛应用于C++开发者社区:Qt在C++开发者社区中非常流行和广泛应用。很多C++开发者选择Qt作为他们开发图形界面和跨平台应用程序的首选框架。Qt提供了丰富的类库和工具,使得C++开发者能够更加高效地开发和维护应用程序。

2. 发展历程

这里我主要是框架/语言及其他方面罗列出几个重要的事件节点

在这里插入图片描述其实从QT的发展来看,也可以看出开源社区的支持对语言的生态是十分重要的。随着2020年QT6.0的发布来说的话,也可以看出GUI框架也是朝着工程化(包括模块化)的方向发展的。

在QT的发展历程中,笔者我也比较关注QT对除C++以外的语言支持,尤其是Python,因为我本身做的项目就是就是基于PYQT的,因为我开始接触QT的时候还没有QT6,所以我多数以往的项目是基于PYQT5的。现在企业做QT应用的也大多数是基于C++或者Python,这个后面1.4笔者我也会介绍相关的区别。

如果想了解更多QT未来的发展,可参考:QT的这篇博客https://endoflife.date/qt
在这里插入图片描述

3. QT架构的主要内容

前面了解了什么是QT以及QT整体的架构发展,那QT框架是怎么样的?包含哪些内容呢?
在这里插入图片描述从上图中,同样可以看出QT支持C++、python、Javascript等语言,所面向的平台包括PC/移动端、嵌入式及网站等。官方把QT框架分成两个主要部分:

  • Essentials:基础模块,定义了Qt在所有平台上的基础。
    在这里插入图片描述
  • Add-Ones:扩展模块,可能仅在某些开发平台上可用。许多扩展模块要么是功能完整的,并存在向后兼容性,要么仅适用于某些平台。
    在这里插入图片描述

4.QT的常用模块

下面同样是官方给出的模块:
在这里插入图片描述
常见基础模块的介绍可参考下图:
在这里插入图片描述
注:该图来源于:Qt框架及模块认识

在日常开发中,最常用的模块应该就是下面5个了,主要是可视化,数据交互等:

  • QtCore:提供了 Qt 的核心功能,例如基本的非 GUI 类、线程和事件处理等。
  • QtGui:提供用户界面(UI)类,例如窗口部件、按钮、标签等。此外,它还包含 QPainter 和 QPalette 等绘图和调色板类。
  • QtWidgets:是 QtGui 模块的子集,提供了一套完整的可视化 UI 控件库,例如按钮、文本编辑器、表格等,用于构建跨平台的桌面应用程序。
  • QtNetwork:提供网络编程类,用于创建 TCP 和 UDP 客户端和服务器,以及处理套接字和 HTTP 请求。
  • QtSql:提供简单易用的数据库访问 API,用于在 Qt 中连接、查询和操作数据源中的数据。

1.2 QT的 why

在这里插入图片描述
在选择框架时,一般是根据框架与当前主要需求的最佳适配度(包括优点等)来做选择。因此,我们需要了解相应框架在所处的地位,以及与其他框架相比较下的优劣势及核心是什么。所以,接下来笔者我讲从核心机制、及与其他框架对比,QT的优劣势及当前QT的主要应用场景等三个角度来描述Why QT。

1. QT的核心机制

首先,什么是QT的核心机制?
Qt的核心机制是指Qt框架的基础机制,主要包括一下几个方面(但这并不说明Qt的机制仅限于此,只是把框架中更加核心的部分抽出来说明,比如框架中常见比较重要的也有视图模型,界面管理机制,数据管理等等,但由于这些都比较相通,所以这里并没有抽离出来):

  • 元对象系统(Meta Object System)
    • 官方介绍链接:The Meta-Object System
      Qt的元对象系统(Meta Object System)是Qt对原有C++进行的一些扩展,主要是为实现对象间更加高效的通信 (主要原因)而引入的,其提供了用于内部对象通讯(inter-object communication)的信号与槽机制 (signals and slots mechanism),运行时类型信息(run-time type information)以及动态属性系统(dynamic property system), 可以在运行时动态获取并操作一个类的元数据,包括类名、继承信息、信号和槽、属性等。
    • 元对象系统基于三件事:
      1. QObject类为可以利用元对象系统的对象提供了一个基类。
      2. 类声明的private部分中的Q_OBLOG宏用于启用元对象特性,如动态属性、信号和插槽。
      3. 元对象编译器(moc)为每个QObject子类提供实现元对象特性所需的代码。

      如何理解上面所说的基于三件事?
      简单来说就是一个系统它如果是元对象系统,那么首先,它必须继承QObject类,而且必须在类声明中添加Q_OBLOG宏和元对象编译器(moc)对象。
      因此,元对象系统在Qt中主要由以下三部分构成:QObject 类、Q_OBJECT 宏和元对象编译器moc。

  • 属性系统(Property System)
    属性系统是一种管理、访问和操作对象属性的机制。它通过使用 Q_PROPERTY 宏将属性与类的成员函数关联起来,以实现对属性的读取和设置。属性可以用于描述对象的各个方面,例如颜色、位置、大小等。
  • 对象模型(Object System)
    对象系统是一种用于管理对象的机制。它基于元对象系统和属性系统,提供了对象的构建、销毁、内存管理等功能,以及对象之间的通信和交互。对象系统的核心是 QObject 类及其派生类,它们可以被组织成对象树。
  • 对象树(Object Tree)
    对象树是指由 QObject 类及其派生类组成的层次结构。对象树是由QObject子对象间关系所构成的树形结构,根是一个QObject,每个节点都是由QObject创建出来的QObject对象。在对象树中,一个对象可以有一个或多个子对象,并且每个对象只能拥有一个父对象。父对象负责管理其子对象的生命周期,子对象在父对象销毁时自动删除。通过对象树,可以方便地组织和管理对象,同时实现对象间的消息传递和事件处理。
  • 信号与槽机制 (Signal and Slot)
    Qt 的信号和槽机制是一种在对象之间进行通信和事件处理的机制。它通过信号和槽的连接,实现了对象间的消息传递机制。信号是一种特殊的成员函数,用于发出消息,而槽是一种特殊的成员函数,用于处理消息。
  • 事件模型(Event model)
    Qt 的事件模型是一种在对象之间进行事件处理的机制。它基于事件-响应者模式,即事件由一个对象产生,而其他对象可以响应这些事件。事件是封装了信息的对象,它包含了事件类型、发送者和接收者等信息。

PS: 上面仅给出相关的简单的描述,更重要的,详细的可以看中篇的笔记内容

下篇笔记链接

下篇笔记:初识QT(中):Why Qt
笔记链接:【待更新】
笔记主要内容:Why Qt,也就是从核心机制、及与其他框架对比,QT的优劣势及当前QT的主要应用场景等三个角度来描述Why QT。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/223440.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7种常见的网络安全设备及其功能

网络安全设备在现代网络环境中起着至关重要的作用,帮助保护个人和组织免受恶意攻击。本文将介绍7种常见的网络安全设备,包括防火墙、入侵检测系统、反病毒软件、数据加密设备、虚拟私人网络、安全信息和事件管理系统以及网络访问控制设备,并详…

Guava的TypeToken在泛型编程中的应用

第1章:引言 在Java世界里,泛型是个相当棒的概念,能让代码更加灵活和类型安全。但是,泛型也带来了一些挑战,特别是当涉及到类型擦除时。这就是TypeToken大显身手的时候! 作为Java程序员的咱们,…

Flink 数据序列化

为 Flink 量身定制的序列化框架 大家都知道现在大数据生态非常火,大多数技术组件都是运行在JVM上的,Flink也是运行在JVM上,基于JVM的数据分析引擎都需要将大量的数据存储在内存中,这就不得不面临JVM的一些问题,比如Ja…

Python算法例27 对称数

1. 问题描述 对称数是一个旋转180后(倒过来)看起来与原数相同的数,找到所有长度为n的对称数。 2. 问题示例 给出n2,返回["11","69","88&#x…

【JAVA】分布式链路追踪技术概论

目录 1.概述 2.基于日志的实现 2.1.实现思想 2.2.sleuth 2.2.可视化 3.基于agent的实现 4.联系作者 1.概述 当采用分布式架构后,一次请求会在多个服务之间流转,组成单次调用链的服务往往都分散在不同的服务器上。这就会带来一个问题:…

计算机网络 运输层下 | TCP概述 可靠传输 流量控制 拥塞控制 连接管理

文章目录 3 运输层主要协议 TCP 概述3.1 TCP概述 特点3.2 TCP连接RSVP资源预留协议 4 TCP可靠传输4.1 可靠传输工作原理4.1.1 停止等待协议4.1.2 连续ARQ协议 4.2 TCP可靠通信的具体实现4.2.1 以字节为单位的滑动窗口4.2.2 超时重传时间的选择4.2.3 选择确认SACK 5 TCP的流量控…

mac m1芯片 pytorch安装及gpu性能测试

pytorch 使用mac的m1芯片进行模型训练。 #小结:在数据量小和模型参数少,batch_size小时,cpu训练更快(原因:每次训练时数据需要放入GPU中,由于batch_size小。数据放入gpu比模型计算时间还长) 在…

(Mac上)使用Python进行matplotlib 画图时,中文显示不出来

【问题描述】 ①报错确缺失字体: ②使用matplotlib画图,中文字体显示不出来 【问题思考】 在网上搜了好多,关于使用python进行matplotlib画图字体显示不出来的,但是我试用了下,对我来说都没有。有些仅使用于windows系…

Netty-2-数据编解码

解析编解码支持的原理 以编码为例,要将对象序列化成字节流,你可以使用MessageToByteEncoder或MessageToMessageEncoder类。 这两个类都继承自ChannelOutboundHandlerAdapter适配器类,用于进行数据的转换。 其中,对于MessageToMe…

字符设备驱动开发-注册-设备文件创建

一、字符设备驱动 linux系统中一切皆文件 1、应用层: APP1 APP2 ... fd open("led驱动的文件",O_RDWR); read(fd); write(); close(); 2、内核层: 对灯写一个驱动 led_driver.c driver_open(); driver_read(); driver_write(…

GoogLeNet(V1)

目录 一、GooLeNet介绍 1、模型设计的motivation 2、Inception块 3、GoogLeNet架构 4、Inception后续变种 5、总结 二、代码实现 1、Inception块 2、GoogLeNet模型 3、训练模型 4、总结 一、GooLeNet介绍 GoogLeNet是由Google团队于2014年提出的深度卷积神经网络架构…

BUG记录 | 使用阿里云OSS实现文件上传后,得到的url无法在浏览器中打开

项目背景 SpringBoot的项目,使用阿里云对象存储OSS对项目中的文件进行存储,所需文件也会通过IDEA中由官方Demo改编而成的工具类作为接口,调用接口后上传 问题描述 使用阿里云OSS实现文件上传后,通过postman测试得到的url无法在…

H266/VVC帧内预测编码

预测编码技术 预测编码(Prediction Coding)是指利用已编码的一个或多个样本值,根据某种模型或方法,对当前的样本值进行预测,并对样本真实值和预测值之间的差值进行编码。 视频中的每个像素看成一个信源符号&#xff…

【UML】第12篇 序列图(1/2)——基本概念和构成

目录 一、什么是序列图(Sequence Diagram) 1.1 定义 1.2 主要用途 1.3 序列图和BPMN的区别和联系 二、序列图的构成 2.1 对象 2.2 生命线 2.3 消息 2.4 激活 序列图,是我个人认为的用处最多的一种图。产品和研发的同学,都…

二级指针的作用 -- 将变量从函数中带出

使用一级指针不能将变量带出 void test(int *p) {static int nub 10; /*使用static是保证函数结束, 变量依然存在, 不然即使将它带出来, 函数结束时这片内存已经被释放了就没有意义了*/p &nub; }int main(void) {int *p NULL;test(p);printf("%d",*p);return …

驱动开发-1

一、驱动课程大纲 内核模块字符设备驱动中断 二、ARM裸机代码和驱动有什么区别? 1、共同点: 都能够操作硬件 2、不同点: 1)裸机就是用C语言给对应的寄存器里面写值,驱动是按照一定的套路往寄存器里面写值 2&#xff09…

开关电源厚膜集成电路引脚功能

开关电源厚膜集成电路引脚功能 一、 STR51213、STR50213、STR50103 引脚号 引脚功能 1 接地,内接稳压基准电路 2 开关管基极 3 开关管集电极 4 开关管发射极 5 误差比较电压信号输入,兼待机控制 二、 STR3302、STR3202 引脚号 引脚功能 1内部半…

华为vrrp+mstp+ospf+dhcp+dhcp relay配置案例

1、左边是vlan 10主桥,右边是vlan 20的主桥,并且互为备桥 2、 vlan 10 vrrp网关默认用左边,vlan 20的vrrp 网关默认用右边,对应mstp生成树 3、两边都track检测,不通就把vrrp减掉60,这样就会自动切另一边了 …

四、UART_阻塞发送中断接收

1、开发环境 (1)Keil MDK: V5.38.0.0 (2)MCU: mm320163D7P 2、实验目的&原理图 2.1、实验目的 (1)上位机串口助手给MCU发送信息,MCU串口通过通过串口助手接收后,将接收到的内容通过串口助手发送到上位机。 (2)串口在whil循环中每隔1秒发送一次…

【一起学Rust | 框架篇 | Tauri2.0框架】Tauri2.0环境搭建与项目创建

文章目录 前言一、搭建 Tauri 2.0 开发环境二、创建 Tauri 2.0 项目1.创建项目2.安装依赖4. 编译运行 三、设置开发环境四、项目结构 前言 Tauri在Rust圈内成名已久,凭借Rust的可靠性,使用系统原生的Webview构建更小的App 以及开发人员可以灵活的使用各…