1. 课程导入

各位同学好,我是老张。做Qt开发有些年头了,踩过的坑不少,积累的经验也还行。今天咱们开始第一讲——Qt是什么,怎么搭环境,怎么跑起第一个程序。

说实话,我刚开始接触Qt那会儿,网上资料远没现在这么全。那时候装个环境都能折腾半天。现在好多了,但有些细节还是容易翻车。咱们一步步来。

1.1 Qt发展史:从挪威小公司到跨平台霸主

Qt的故事要从1991年说起。两个挪威人——Haavard Nord和Eirik Chambe-Eng,在挪威的阳光下写出了一个跨平台图形框架。嗯,就是Qt的前身。

我印象最深的是1995年,Qt 1.0正式发布。那时候它还是个“小众玩具”,支持Unix和Windows。真正让它起飞的是1997年——KDE桌面环境选用了Qt。这一下,Qt在Linux世界站稳了脚跟。

后来几经转手,从Trolltech到Nokia,再到Digia,最后是现在的The Qt Company。2014年Qt 5.0发布,QML和Qt Quick让界面开发变得特别灵活。2020年Qt 6.0推出,架构大改,性能提升明显。

关键时间节点:

  • 1991年:Qt项目启动
  • 1995年:Qt 1.0正式发布
  • 2005年:Qt 4.0发布,引入信号槽新语法
  • 2012年:Qt 5.0发布,QML成为一等公民
  • 2020年:Qt 6.0发布,架构重构

1.2 Qt应用领域:你想象不到它有多广

很多人以为Qt只能做桌面软件。其实不然。我这些年用Qt做过的东西,从工业控制到医疗设备,从汽车仪表到金融交易系统,跨度非常大。

给你列几个典型场景:

领域 典型应用 为什么选Qt
工业自动化 PLC上位机、SCADA系统 稳定、实时性好、串口/网络库成熟
汽车电子 仪表盘、车载娱乐系统 QML做动画流畅、硬件加速好
医疗设备 CT控制台、监护仪界面 跨平台、安全认证支持好
金融交易 行情显示、交易终端 高性能、低延迟、自定义控件灵活
嵌入式设备 智能家居面板、POS机 资源占用可控、裁剪方便

说白了,只要是需要图形界面、又对性能和稳定性有要求的场景,Qt基本都能上。我有个朋友在医疗器械公司,他们那套CT机的控制软件,从Windows移植到Linux,Qt代码几乎没改——这就是跨平台的好处。

1.3 Qt开发环境搭建:MinGW还是MSVC?

这是新手最容易纠结的问题。我直接说结论:

  • MinGW:Windows上的GCC编译器。开源、免费、安装简单。适合初学者、小型项目、跨平台开发。
  • MSVC:微软的Visual C++编译器。性能优化更好、调试工具更强。适合Windows原生开发、大型项目、需要调用Windows API的场景。

我个人习惯是:学习阶段用MinGW,省心。做正式项目用MSVC,性能好。但要注意——MinGW编译的程序不能直接调用MSVC编译的库,反之亦然。这个坑我踩过,当时折腾了一天才发现是编译器不匹配。

我的建议:初学者直接下载Qt在线安装器,选择MinGW 64-bit套件。等熟悉了再装MSVC。别一上来就全选,安装包几十个G,很多你用不上。

安装步骤(以Qt 6.5为例)

  1. 访问Qt官网,下载Qt Online Installer
  2. 注册Qt账号(免费就行)
  3. 选择安装路径——路径不要有中文和空格
  4. 选择组件:Qt 6.5.x → MinGW 64-bit → Developer and Designer Tools → MinGW 11.2.0
  5. 等待下载安装(大概20-30分钟)
  6. 配置环境变量:将Qt的bin目录添加到PATH

避坑指南:我曾经遇到过安装完成后Qt Creator打不开,原因是杀毒软件拦截了Qt的调试工具。安装时最好暂时关闭杀毒软件。另外,如果你电脑上装了多个版本的Qt,一定要在Kit选择里指定正确的编译器路径。

1.4 第一个Qt程序:Hello World的两种写法

环境搭好了,咱们写个程序试试。Qt里写界面有两种方式:传统Widget和QML。我两种都给你演示一下。

方式一:传统Widget(C++代码)

// main.cpp
#include <QApplication>
#include <QLabel>

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

    QLabel label("Hello, Qt!");
    label.setWindowTitle("我的第一个Qt程序");
    label.resize(300, 200);
    label.show();

    return app.exec();
}

这段代码很简单:创建QApplication对象,创建一个标签,设置文字和标题,显示出来。注意app.exec()——它启动了Qt的事件循环,程序才能响应用户操作。

方式二:QML(声明式界面)

// main.qml
import QtQuick
import QtQuick.Controls

Window {
    width: 400
    height: 300
    visible: true
    title: "我的第一个QML程序"

    Label {
        anchors.centerIn: parent
        text: "Hello, Qt!"
        font.pixelSize: 24
        color: "#3498db"
    }
}

QML的写法更直观。你想想看,用C++写界面,布局、样式都得代码控制。QML直接声明“我要一个窗口,窗口中间放个标签,文字蓝色24号”——代码读起来就像在描述界面本身。

运行方式:

  • Widget程序:在Qt Creator中点击运行,或者用命令行 g++ main.cpp -o hello -I Qt/include -L Qt/lib -lQt6Core -lQt6Widgets
  • QML程序:用 qmlscene main.qml 或者Qt Creator直接运行

1.5 本章知识体系

我把这章的核心内容画了张图,方便你理解整体结构:

第1章:Qt概述与环境搭建 Qt开发入门 Qt发展史 应用领域 环境搭建 第一个Qt程序 1991-2020 MinGW vs MSVC Widget + QML 核心要点 • Qt是跨平台C++框架,支持Windows/Linux/macOS/嵌入式 • 开发环境推荐MinGW入门,MSVC做正式项目 • 第一个程序建议用Widget方式,理解事件循环后再学QML

1.6 本章小结

这一章咱们把Qt的来龙去脉、能干什么、怎么搭环境、怎么写第一个程序都过了一遍。你可能会觉得内容有点多,但别急——这些都是基础中的基础。

我个人建议你先把环境装好,跑通那个Hello World。代码不用多,能编译通过、看到窗口弹出来,就算入门了。后面咱们再慢慢深入信号槽、事件循环、串口通信这些硬核内容。

课后练习:

  1. 分别用MinGW和MSVC编译一次Hello World,观察编译速度的差异
  2. 修改QLabel的文字颜色和字体大小,看看效果
  3. 尝试在QML里添加一个按钮,点击后改变标签文字