初识QT(上篇):What Qt

初识QT(上篇):What Qt

  • [前言 & 说明](#前言 & 说明)
  • 初识QT
    • [1.1 QT的what](#1.1 QT的what)
      • [1. 介绍](#1. 介绍)
      • [2. 发展历程](#2. 发展历程)
      • [3. QT架构的主要内容](#3. QT架构的主要内容)
      • 4.QT的常用模块
    • [1.2 QT的 why](#1.2 QT的 why)
      • [1. QT的核心机制](#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。

相关推荐
用户805533698035 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner5 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz10 天前
QML Hello World 入门示例
qt
xcyxiner13 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner13 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner14 天前
DicomViewer (添加模型类)3
qt
xcyxiner14 天前
DicomViewer (目录调整) 2
qt
xcyxiner14 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00616 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术16 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript