第一章:Qt概述与环境搭建
各位同学好,我是老张。做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为例)
- 访问Qt官网,下载Qt Online Installer
- 注册Qt账号(免费就行)
- 选择安装路径——路径不要有中文和空格
- 选择组件:Qt 6.5.x → MinGW 64-bit → Developer and Designer Tools → MinGW 11.2.0
- 等待下载安装(大概20-30分钟)
- 配置环境变量:将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.6 本章小结
这一章咱们把Qt的来龙去脉、能干什么、怎么搭环境、怎么写第一个程序都过了一遍。你可能会觉得内容有点多,但别急——这些都是基础中的基础。
我个人建议你先把环境装好,跑通那个Hello World。代码不用多,能编译通过、看到窗口弹出来,就算入门了。后面咱们再慢慢深入信号槽、事件循环、串口通信这些硬核内容。
课后练习:
- 分别用MinGW和MSVC编译一次Hello World,观察编译速度的差异
- 修改QLabel的文字颜色和字体大小,看看效果
- 尝试在QML里添加一个按钮,点击后改变标签文字