一、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,新建项目:

  1. 文件 → 新建文件或项目 → Application → Qt Widgets Application
  2. 项目名称填「HelloQt」,路径随便选
  3. 构建系统选「CMake」(Qt 6默认)
  4. 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程序 核心概念 Qt Creator 从历史到实践,一步步构建 你的Qt知识体系

这张图把本章内容串起来了。Qt的历史让你知道它从哪来,跨平台原理让你明白它怎么工作,环境搭建是动手的前提,第一个程序则是你实战的起点。后面的章节,我们会沿着这个体系一步步深入。

小建议: 学Qt别贪快。我当年就是急着看高级特性,结果基础不牢,后面debug debug到崩溃。把环境配好,把第一个程序跑通,比什么都重要。

可可精品资料库