1. Qt概述与环境搭建

1.1 Qt是什么?—— 一个跨平台的C++框架

Qt,说白了就是一个C++的图形用户界面框架。但你要是只把它当成界面库,那就太小看它了。我刚开始接触Qt时,也觉得它就是个画按钮、拉窗口的工具。后来做项目多了才发现,Qt在网络通信、数据库操作、多线程处理、甚至嵌入式开发里都能派上用场。

Qt最大的特点是什么?一次编写,到处编译。你写好的代码,在Windows上编译一下,就能跑;拿到Linux上重新编译,也能跑;放到macOS上,照样跑。嗯,这里要注意——是“重新编译”,不是“直接运行”。毕竟不同平台底层的API还是有差异的,但Qt帮你把这些差异都封装好了。

核心特点:

  • 跨平台:支持Windows、Linux、macOS、Android、iOS等
  • 面向对象:封装良好,信号与槽机制是其灵魂
  • 组件丰富:从基础控件到图表、WebEngine,应有尽有
  • 开源免费:社区版完全够用,商业版提供额外支持

1.2 Qt发展史——从挪威小公司到全球框架

Qt的故事要从1991年说起。当时挪威的两位程序员Haavard Nord和Eirik Chambe-Eng,想做一个跨平台的GUI框架。为什么?因为那时候写界面太痛苦了——Windows上用MFC,Linux上用Motif,换个平台代码就得重写。

1995年,他们正式发布了Qt 1.0。我记得第一次看到Qt的演示时,最震撼的就是那个信号与槽机制——对象之间通信居然可以这么优雅!后来Qt被诺基亚收购,再后来卖给Digia,现在由Qt Company独立运营。

几个关键版本节点:

版本 发布时间 重要变化
Qt 1.0 1995年 诞生,支持X11和Windows
Qt 4.0 2005年 架构大重构,引入QGraphicsView
Qt 5.0 2012年 模块化,支持C++11,QML成熟
Qt 6.0 2020年 全面拥抱C++17,图形架构升级

现在最新的Qt 6.x系列,性能比Qt 5提升了不少,尤其是图形渲染这块。我个人建议新项目直接用Qt 6,除非你有遗留代码要维护。

1.3 Qt能做什么?—— 应用领域一览

你可能会问:Qt到底用在哪些地方?我简单列几个我实际接触过的场景:

  • 桌面应用开发:WPS Office、VirtualBox、Autodesk Maya,这些大牌软件都是用Qt做的
  • 工业数据采集:我在做智能制造项目时,上位机软件就是用Qt写的,串口通信、数据曲线显示、报表导出,一套搞定
  • 嵌入式系统:车载娱乐系统、医疗设备界面、智能家居控制面板,Qt for MCU甚至能在微控制器上跑
  • 音视频处理:Qt Multimedia模块支持摄像头、音频播放、视频录制,做监控系统很方便

我的经验:如果你要做数据采集类的上位机软件,Qt几乎是首选。它的QSerialPort、QModbus、QChart、QSql这些模块,简直就是为工业场景量身定做的。

1.4 开发环境搭建——MinGW还是MSVC?

搭建Qt开发环境,第一步就是选编译器。Windows下主要有两个选择:

MinGW: 全称Minimalist GNU for Windows。它把GCC编译器移植到了Windows上。好处是免费、开源、安装简单。我刚开始学Qt时用的就是MinGW,因为不用装Visual Studio那么大个家伙。

MSVC: 微软的Visual C++编译器。需要安装Visual Studio(或者单独装Build Tools)。优势是调试器强大,生成的程序性能略好,而且有些第三方库只提供MSVC版本。

怎么选?我个人建议:

  • 如果你是初学者,或者只是做小工具,用MinGW就够了
  • 如果你要对接Windows特有的API(比如COM组件),或者需要调试复杂的内存问题,用MSVC
  • 如果你不确定,那就两个都装。Qt Creator可以随时切换编译器

避坑指南:我曾经在项目里混用了MinGW编译的库和MSVC编译的程序,结果链接时各种报错。记住:同一个项目里,所有库和主程序必须用同一套编译器编译,否则会出现符号不匹配的问题。

1.5 第一个Qt程序——Hello World

环境搭好了,我们来写第一个程序。打开Qt Creator,点击"新建项目"→"Application"→"Qt Widgets Application"。

项目创建好后,你会看到几个文件。我们直接修改main.cpp:

#include <QApplication>
#include <QLabel>

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    QLabel label("Hello, Qt!");
    label.resize(300, 200);
    label.setAlignment(Qt::AlignCenter);
    label.show();

    return app.exec();
}

这段代码做了几件事:

  1. 创建QApplication对象——每个Qt程序必须有且只有一个
  2. 创建QLabel控件,显示"Hello, Qt!"文字
  3. 设置窗口大小和文字对齐方式
  4. 调用show()显示窗口
  5. 进入事件循环,等待用户操作

点击运行按钮(绿色三角),如果一切正常,你会看到一个窗口弹出来,中间写着"Hello, Qt!"。

小技巧:如果你用的是Qt 6,记得在.pro文件里加上QT += widgets。Qt 5默认就包含了,但Qt 6把widgets模块独立出来了。

1.6 本章知识体系

为了让你对本章内容有个整体认识,我画了一张结构图:

Qt概述与环境搭建 Qt是什么 发展史与版本 应用领域 跨平台框架 信号与槽机制 丰富的组件库 Qt 1.0 → Qt 4.0 Qt 5.0 → Qt 6.0 桌面应用 工业数据采集 嵌入式系统 开发环境:MinGW vs MSVC + Qt Creator

这张图把本章的知识点串起来了。从Qt是什么开始,到它的发展历程,再到实际能做什么,最后落地到环境搭建和第一个程序。你学完这一章,应该对Qt有个整体的认识了。


好了,第一章就到这里。Qt的世界才刚刚打开,后面我们会一步步深入,从信号与槽到数据采集,从界面设计到性能优化。有什么问题,随时可以找我聊。

可可精品资料库