一、Qt概述与环境搭建:Qt历史、跨平台原理、Qt Creator安装与配置、第一个Qt程序
1.1 Qt的前世今生
Qt的历史,得从1991年说起。那时候我还在上学,Haavard Nord和Eirik Chambe-Eng这两个挪威人,开始捣鼓一个跨平台的图形界面框架。说白了,他们就是想写一套代码,能在Windows、Mac、Linux上都能跑起来。
1995年,Qt正式发布。名字里的「Q」是因为当时Emacs里那个字母打不出来,就随便选了个Q——嗯,就是这么随性。后来Qt被诺基亚收购,再后来到了Digia手里,现在由Qt Company维护。我2012年入行时用的还是Qt 4.8,现在都Qt 6了,时间过得真快。
核心版本里程碑:
- Qt 1.0 (1995) —— 最初的跨平台GUI框架
- Qt 4.0 (2005) —— 引入QGraphicsView、信号槽新语法
- Qt 5.0 (2012) —— 模块化重构,支持移动端
- Qt 6.0 (2020) —— 全面拥抱C++17,QML性能大幅提升
1.2 跨平台原理——它到底是怎么做到的?
你想想看,Windows用GDI,Linux用X11/Wayland,macOS用Cocoa。Qt怎么统一这些?
答案就是「抽象层」。Qt把所有平台相关的API封装成一套统一的接口。比如你调用QPushButton,在Windows上它背后调的是CreateWindowEx,在Linux上调的是XCreateWindow。你写代码时根本不用关心底层。
我个人习惯把Qt的跨平台分成三层:
- 底层抽象层(QPA) —— 处理窗口系统、事件循环、OpenGL上下文
- 核心库(QtCore、QtGui) —— 数据结构、事件、绘图原语
- 上层模块(QtWidgets、QtQuick) —— 你直接用的控件和QML
我在项目中遇到过一个问题:同样的代码在Windows上显示正常,在Linux上按钮却变形了。查了半天,发现是字体渲染差异导致的。Qt虽然跨平台,但字体、DPI这些细节还是得针对不同平台微调。
避坑指南: 我曾经在Linux上直接用Windows的字体路径,结果程序直接崩溃。后来改用QFontDatabase动态加载字体,才搞定。记住:跨平台不是「写一次跑所有」,而是「写一次调所有」。
1.3 Qt Creator安装与配置
安装Qt Creator其实很简单。去官网下载在线安装器,选你需要的版本就行。我个人建议:
- 新手直接选最新稳定版(目前是Qt 6.5 LTS)
- 组件勾选「Qt」→ 选你的编译器(MinGW或MSVC)
- 勾选「Developer and Designer Tools」→ Qt Creator
安装完后,记得配置编译器。打开Qt Creator,进入「工具」→「选项」→「Kits」:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| 编译器 | MinGW 64-bit | Windows上最省心,自带调试器 |
| Qt版本 | Qt 6.5.0 | 确保路径正确,别选成Qt 5的 |
| 调试器 | GDB | MinGW自带,不用额外装 |
注意: 如果你用MSVC,记得先装Windows SDK和调试工具。我当年第一次配MSVC,忘了装调试器,结果断点打不上,折腾了一下午。
1.4 第一个Qt程序——Hello World
好了,环境搭好了,我们来写第一个程序。打开Qt Creator,新建项目:
- 文件 → 新建文件或项目 → Application → Qt Widgets Application
- 项目名称填「HelloQt」,路径随便选
- 构建系统选「CMake」(Qt 6默认)
- Kit选你刚才配好的那个
创建完成后,你会看到自动生成的main.cpp:
#include <QApplication>
#include <QWidget>
#include <QLabel>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QWidget window;
window.setWindowTitle("我的第一个Qt程序");
window.resize(400, 300);
QLabel *label = new QLabel("Hello, Qt!", &window);
label->move(150, 130);
window.show();
return app.exec();
}
这段代码干了什么?说白了就四步:
- 创建QApplication对象——每个Qt程序必须有一个
- 创建QWidget窗口——这就是你的主界面
- 在窗口上放一个QLabel——显示文字
- 调用show()显示窗口,进入事件循环
运行一下,你会看到一个窗口,中间写着「Hello, Qt!」。嗯,虽然简单,但这是你Qt之路的第一步。
我的一点经验: 刚开始学Qt,别急着搞复杂界面。先把信号槽、事件循环、对象树这几个核心概念吃透。我见过太多人一上来就拖控件,结果连内存泄漏怎么排查都不知道。
1.5 本章知识体系
下面这张图,是我自己总结的Qt知识体系。你看一眼,心里有个谱:
这张图把本章内容串起来了。Qt的历史让你知道它从哪来,跨平台原理让你明白它怎么工作,环境搭建是动手的前提,第一个程序则是你实战的起点。后面的章节,我们会沿着这个体系一步步深入。
小建议: 学Qt别贪快。我当年就是急着看高级特性,结果基础不牢,后面debug debug到崩溃。把环境配好,把第一个程序跑通,比什么都重要。