使用Qt编程的一点感悟
非AI生成觉得有用就请您帮忙点赞转发收藏吧多谢看官。Qt诞生于1991也是个90后。它是一个支持跨平台Windows、Linux、macOS、Android、嵌入式OS等的C图形用户界面框架Qt提供了统一的API来处理文件I/O、网络通信、数据库访问等底层操作屏蔽了Windows、Linux、macOS等不同操作系统的差异这使得开发者可以专注于业务逻辑而非平台适配使用Qt Creator拖拽式开发C窗体程序大大提高了C桌面软件的开发效率应对中小型软件开发游刃有余个人感觉比微软VCMFC更容易上手。支持QSS类似Web的CSS样式美化和动画能够实现让人惊艳的软件用户界面。Qt 采用高度模块化设计模块数量随版本Qt 5/Qt 6和安装配置动态变化。核心模块分为基础核心、UI 框架及功能扩展三大类使用时只需在工程文件中添加对应模块即可。注意必须先在工程文件添加模块才能在代码文件中包含该模块相关联的头文件。基础核心模块QtCore非 GUI 核心功能包含事件循环、信号与槽机制、多线程、文件 I/O、容器类QList, QMap、JSON 处理等。QtGui图形界面基础包含窗口系统集成、2D 绘图QPainter、字体管理、OpenGL/Vulkan 集成及输入事件处理。QtQmlQML 语言运行时引擎支持声明式 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 WidgetsQt多媒体子模块包含用于实现多媒体功能的基于widget的类。QtCharts数据可视化图表组件折线图、饼图、散列图等。QtSerialPort串口通信支持。QtWebEngine嵌入 Chromium 内核渲染网页内容需单独许可或注意开源协议。QtTest单元测试框架支持自动化测试与基准测试。Qt Quick TestQML应用程序的单元测试框架其中测试用例被写成JavaScript函数。Qt Virtual Keyboard实现不同输入方法的框架以及QML虚拟键盘。支持本地化键盘布局和自定义视觉主题。QtBluetooth / QtNfc近场通信与蓝牙连接支持。Qt OpenGLOpenGL支持类。已弃用建议使用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_LINUX、Q_OS_UNIX、Q_OS_ANDROID、Q_OS_IOS包含具体平台的头文件增加具体平台的链接库使用相应的编译器编译即可。以在Windows平台和Linux使用网络库为例#ifdef _WIN32 //在Windows平台有效在非Windows平台被忽略 #define WIN32_LEAN_AND_MEAN #define _WINSOCK_DEPRECATED_NO_WARNINGS #includewindows.h #includeWinSock2.h #pragma comment(lib,ws2_32.lib) #else //在非Windows平台有效在Windows平台被忽略 #includeunistd.h //unistd #includearpa/inet.h #includestring.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); #endifQt框架最显著的特征就是通过元对象系统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获益良多也写写博客分享一点自己的心得体会。