非AI生成,觉得有用,就请您帮忙点赞转发收藏吧,多谢看官。
        Qt诞生于1991,也是个90后。它是一个支持跨平台(Windows、Linux、macOS、Android、嵌入式OS等)的C++图形用户界面框架,Qt提供了统一的API来处理文件I/O、网络通信、数据库访问等底层操作,屏蔽了Windows、Linux、macOS等不同操作系统的差异,这使得开发者可以专注于业务逻辑而非平台适配,使用Qt Creator拖拽式开发C++窗体程序,大大提高了C++桌面软件的开发效率,应对中小型软件开发游刃有余,个人感觉比微软VC+MFC更容易上手。
        支持QSS(类似Web的CSS)样式美化和动画,能够实现让人惊艳的软件用户界面。
        Qt 采用高度模块化设计,模块数量随版本(Qt 5/Qt 6)和安装配置动态变化。核心模块分为‌基础核心‌、‌UI 框架‌及‌功能扩展‌三大类,使用时只需在工程文件中添加对应模块即可。注意:必须先在工程文件添加模块,才能在代码文件中包含该模块相关联的头文件。
基础核心模块:

  • QtCore‌:非 GUI 核心功能,包含事件循环、信号与槽机制、多线程、文件 I/O、容器类(QList, QMap)、JSON 处理等。
  • QtGui‌:图形界面基础,包含窗口系统集成、2D 绘图(QPainter)、字体管理、OpenGL/Vulkan 集成及输入事件处理。
  • QtQml‌:QML 语言运行时引擎,支持声明式 UI 逻辑与 C++ 混合编程。‌‌

UI界面模块:

  • QtWidgets‌:传统桌面 UI 组件库,提供按钮、表格、对话框等基于 C++ 的控件(Qt 6 中独立于 QtGui)。
  • QtQuick‌:基于 QML 的现代声明式 UI 框架,利用 GPU 加速渲染,适合移动端和高动态交互界面。
  • QtQuick Controls‌:为 Qt Quick 提供现成的高性能 UI 组件(如按钮、滑块、菜单)。‌‌

常用功能扩展模块:

  • QtNetwork‌:网络编程,支持 TCP/UDP Socket、HTTP、FTP 及异步 DNS。
  • QtSql‌:数据库访问,支持 SQL 查询及多种数据库驱动(MySQL, PostgreSQL, SQLite,ODBC 等)。
  • QtMultimedia‌:音视频播放、录制及摄像头控制。
  • Qt Multimedia Widgets:Qt多媒体子模块,包含用于实现多媒体功能的基于widget的类。
  • QtCharts‌:数据可视化图表组件(折线图、饼图、散列图等)。
  • QtSerialPort‌:串口通信支持。
  • QtWebEngine‌:嵌入 Chromium 内核渲染网页内容(需单独许可或注意开源协议)。
  • QtTest‌:单元测试框架,支持自动化测试与基准测试。
  • Qt Quick Test:QML应用程序的单元测试框架,其中测试用例被写成JavaScript函数。
  • Qt Virtual Keyboard:实现不同输入方法的框架以及QML虚拟键盘。支持本地化键盘布局和自定义视觉主题。

  • QtBluetooth‌ / ‌QtNfc‌:近场通信与蓝牙连接支持。‌‌
  • Qt OpenGL:OpenGL支持类。已弃用,建议使用Qt GUI模块中的QOpenGL类。
  • Qt MQTT:机器对机器(M2M)协议,以最小的开销提供通信信道。
  • Qt WebEngine:用于在使用Chromium浏览器项目的应用程序中嵌入网络内容的类和函数。
  • Qt OPC UA:用于与工业应用中的数据建模和数据交换协议OPC UA交互的Qt API。

  • Qt Serial Bus:提供对串行工业总线接口的访问。目前该模块支持CAN总线和Modbus协议。

  • Qt Concurrent:多线程类的封装,可在不调用底层Qt原始多线程框架的情况下实现多线程功能。

  • Qt PDF:显示PDF文件。允许在应用程序中显示产品文档。

  • Qt SVG:用于显示SVG文件内容的类。支持SVG 1.2 Tiny标准的一个子集。

 其他不常用功能扩展模块(只列一小部分):

  • Qt Sensors:提供对传感器硬件和动作手势识别的访问。

  • Qt Remote Objects:为在进程或设备之间共享QObject的API(属性/信号/槽)提供了一个易用的机制。

  • Qt Data Visualization:用于创建酷炫的3D数据可视化的UI组件。

  • Qt WebChannel:提供从HTML客户端对QObject或QML对象的访问,以实现Qt应用程序与HTML/JavaScript客户端的无缝集成。

  • Qt Network Authorization:为基于OAuth的在线服务授权提供支持。

        如果全部使用Qt框架提供的类库,一套软件代码,做一点微调就能编译(或交叉编译)成各个平台的可执行程序(文件),对于那些需要在多平台运行的软件,那是真的很香的。
        如果要使用操作系统的库函数,需结合平台宏定义:Q_OS_WIN(_WIN32等效)、Q_OS_MAC、Q_OS_LINUXQ_OS_UNIXQ_OS_ANDROID、Q_OS_IOS,包含具体平台的头文件,增加具体平台的链接库,使用相应的编译器编译即可。以在Windows平台和Linux使用网络库为例:

#ifdef _WIN32
    //在Windows平台有效,在非Windows平台被忽略
    #define WIN32_LEAN_AND_MEAN
    #define _WINSOCK_DEPRECATED_NO_WARNINGS
    #include<windows.h>
    #include<WinSock2.h>
    #pragma comment(lib,"ws2_32.lib")
#else
    //在非Windows平台有效,在Windows平台被忽略
    #include<unistd.h> //unistd
    #include<arpa/inet.h>
    #include<string.h>

    #define SOCKET int
    #define INVALID_SOCKET  (SOCKET)(~0)
    #define SOCKET_ERROR            (-1)
#endif

#ifdef _WIN32
    //在Windows平台有效,在非Windows平台被忽略
    //启动Windows socket 2.x环境
    WORD ver = MAKEWORD(2, 2);
    WSADATA dat;
    WSAStartup(ver, &dat);
#endif

         Qt框架最显著的特征就是通过元对象系统(Meta Object System)提供了信号槽机制,对象之间无需了解彼此的内部实现细节,可以灵活用于类和类、模块和模块的松散耦合通信,有助于实现高内聚低耦合的软件设计。   
        基于相同的软件设计,使用Qt框架开发的程序和使用原生C++开发的程序相比,性能上稍微会有所下降,毕竟Qt类是基于原生C++和操作系统平台类库的封装,这一点需要注意。    
         Qt的功能非常强大,类文件众多,据初步统计,有几千个之多,无需全部掌握,日常使用的可能就几百个左右。建议从模块入手,先易后难,一个一个模块学习。
        Qt提供的功能几乎涵盖我们软件编码的方方面面,您能想到的它可能都有,能够灵活用于各种行业或场景,它是高性能 C++ 底层‌与‌灵活 UI 表现层‌的完美结合,这也是它历经30余年,还老当益壮的原因吧。
        凭借‌高性能、一次编写随处部署‌及‌强大的 2D/3D 渲染能力‌,Qt软件主要应用于对稳定性、实时性和界面交互要求极高的以下核心行业:  

      核心应用行业

  • 汽车与交通‌:Qt 是‌智能座舱 HMI‌(人机交互界面)的主流选择,广泛用于‌数字仪表盘、信息娱乐系统、平视显示器‌(HUD)及后排娱乐系统。其通过 ASIL B 功能安全认证,支持舱驾融合架构,被现代、通用、奔驰等主流车企及 Tier 1 供应商采用 。
  • 工业自动化与控制‌:用于开发‌SCADA 系统、DCS 分布式控制系统、PLC 可视化界面、CNC 控制面板‌及机器人示教器。Qt 支持 OPC UA、MQTT 等工业协议,满足 IEC 61508 等功能安全标准,适用于工厂监控与工业物联网(IIoT)场景 。
  • 医疗电子‌:应用于‌医疗成像设备‌(如 CT、MRI)等。该领域对软件可靠性要求极高,Qt 的确定性内存管理和长期支持版本(LTS)符合医疗行业严苛的质量监管标准 。
  • 航空航天与国防‌:用于‌航空电子显示系统、飞行模拟器、任务控制系统‌及地面站软件。Qt 支持 DO-178C 等航空安全标准,能在 QNX、VxWorks 等实时操作系统上稳定运行 。
  • 消费电子与智能家居‌:驱动‌智能电视、机顶盒、游戏主机、智能家电‌及可穿戴设备界面。其轻量级特性(Qt for MCUs)使其能在资源受限的微控制器上运行,覆盖从低端到高端的全系列设备 。
  • 能源与基础设施‌:用于‌电网监控系统、能源管理系统、石油天然气开采控制终端‌及水处理设施监控,支持远程访问与复杂数据可视化 。‌‌

       其他重要领域

  • 桌面专业软件‌:包括 CAD/CAE 设计工具(如 FreeCAD)、视频编辑软件、科学计算可视化及 GIS 地理信息系统 。
  • 移动与嵌入式应用‌:随着鸿蒙(HarmonyOS)、Linux 等生态发展,Qt 正加速适配多端场景,支持手机、平板及工业手持终端的开发 。‌       

        从来没有系统学习过C++的朋友,还是建议先学C++基础再学Qt,特别是指针相关的内容,一定要深入学习掌握,多动手编码实践,纸上得来终觉浅,绝知此事要躬行。
        掌握 Qt 是一场漫长的修行。它既提供了强大的工具链让开发者能快速构建美观的应用,也设置了诸多底层细节的坑点考验耐心。成功的 Qt 开发者不仅需要精通 C++ 和框架本身,更需要具备跨平台思维、良好的架构设计能力以及对用户体验的极致追求。在不断的踩坑与填坑中,方能体会到“用生命写代码,用灵魂做界面”的真正含义。
        Qt和C++一样,内容博大精深,不要想着1月速成甚至7天速成,这都不现实,急于求成大概率会出现软件莫名崩溃的情况,还会严重影响学习的劲头。先打好地基,学好指针、STL标准模板库、内存模型、多线程、网络通信、数据库编程、常用的第三方库(FFmpeg/OpenCV/OpenGL等)等知识,慢慢学到精髓,才能盖万丈不倒高楼。

        个人从CSDN获益良多,也写写博客,分享一点自己的心得体会。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐