刚拿到 Qt 安装包的时候,大多数人的第一反应是“这有什么难的,一路下一步不就行了”。等你真正装完、打开 Qt Creator、新建一个窗口工程,结果发现编译器套件是灰的,或者编译时报出一长串:-1: error: dependent '..\..\..\qt\5.15.2\msvc2019_64\include\qtwidget...'这种莫名其妙的问题,才会明白 Qt 的安装坑比想象中多。
这篇博文不打算做那种“官网下载、双击 exe、下一步下一步”的流水账教程。我更想把从零到能跑通第一个 Qt 工程这件事讲透,尤其针对 Windows 和 Linux 两条主路径,把版本选择、编译器匹配、组件勾选、环境变量这些最劝退新人的环节拆开揉碎。无论你是刚接触 Qt 的小白,还是以前用 MinGW 现在被迫切到 MSVC 的开发者,或者只是想在自己电脑上把 Qt 环境快速捣鼓出来的学生党,这篇文章都能当作一份可以直接照着抄的作业。
1. 安装前的关键抉择:先理清三件事再说下一步
很多人的 Qt 安装失败其实不是手滑,而是从一开始就选错了方案。安装 Qt 不像装微信,装完就能用,它必须解决“版本、编译器、开发工具链”这三个相互咬合的问题。这三个问题没想清楚,后面每一步都会踩坑。
1.1 版本怎么选:LTS、经典版与新版之间的取舍
Qt 的版本策略比较特殊,它不搞“最新就是最好”那一套。官方每年都会发布新的功能版本,比如 6.4、6.5、6.8,但真正被工业界广泛使用的,往往是 LTS(长期支持)版本,因为 LTS 意味着官方会持续修复安全漏洞和关键 bug,而且社区资源沉淀得足够厚。
在 Windows 开发圈里,5.15.2 是一个非常特殊的存在。它算是 Qt5 系列里口碑最好、兼容性最稳的版本之一,很多教材、公司内部项目模板、开源项目的文档都基于它编写。即便 Qt6 发布好几年了,你依然能在热词榜上看到大量“qt 5.15.2 下载安装”“qt 5.15.2 离线下载”的搜索,说明这个版本的存量用户极其庞大。
选版本时我给一个非常务实的建议:如果只是自己学习、跟着书敲代码,选 5.15.2 或 6.2 LTS 都行,但优先 5.15.2,因为遇到问题时代码一搜就能找到一堆答案;如果是做新产品且不依赖老模块,可以直接上 6.5 之后的 LTS;如果项目已经定了版本,那就别犹豫,老老实实装指定版本,不要擅自升级,Qt 的模块差异和编译配置差异会让项目出现大量无谓的报错。
1.2 编译器选择:MinGW 还是 MSVC,决定了你后面绕多少弯路
Qt 官方在 Windows 平台上提供两套编译工具链:MinGW 和 MSVC。这两者的区别不仅是编译器名字不同,而是整个构建生态的差异。
MinGW 是 GCC 在 Windows 上的移植版本,优点是安装简单,不需要额外装 Visual Studio,下载 Qt 安装包时勾选一个 MinGW 编译器就能自己玩。对于初学者,MinGW 的体验确实友好得多,教材里“新建工程、点运行、弹出窗口”的流程它最符合。
MSVC 是微软的 C++ 编译器,它在 Windows 平台上的系统调用兼容性、调试器能力、性能调优方面都更强。很多商业项目、涉及 Windows 特有 API 的项目、还有需要接第三方 Windows SDK 的项目,都会强制要求 MSVC 版本。但代价是:你必须在机器上先装好 Visual Studio 或 Build Tools,然后 Qt 才能识别到这套编译器。
经常有人问:能不能先装 MinGW 版,以后需要了再装 MSVC?可以,但这两套工具链的代码不能混用,同一个工程用 MinGW 编完的产物,MSVC 认不了。我见过不少人两个都装了,结果 Kit 选错,编译时报一堆莫名其妙的头文件错误,最后才反应过来是编译套件的问题。所以装之前先问自己:我的项目后续方向是什么?如果只是学习,MinGW 足够;如果是跟着公司项目走,直接问清项目用哪套,然后只装那一套,别给自己制造选择题。
1.3 在线安装器还是离线包:时效、体积与网络环境之间的平衡
Qt 的 Windows 安装包其实分成两种:在线安装器(安装时实时下载)和离线安装包(一次性下载完成后本地安装)。很多人光顾着下载,没搞清楚这两者区别,以至于高速下错。
在线安装器是一个很小的 exe,运行后自己选择组件、版本,然后边下载边装。它适合网络条件好、不介意等待的人,而且组件选择灵活,想装哪个模块随时可以再运行维护工具添加。但缺点也很明显:国内网络环境下拖动官方服务器动辄几 KB,一个大模块装几小时毫不夸张,而且安装过程中断线后恢复不一定顺畅。
离线安装包体积很大,Qt 5.15.2 完整版离线包在 2GB 上下,但它一次到位,后续安装过程中不会因为网络波动卡死。离线包在下载时可以通过国内镜像站拉取,比如清华源、中科大源这类正规开源镜像站,一般都能跑满带宽。我的习惯是优先离线包,尤其是要装 5.15.2 这个经典版本,离线包只要校验好 SHA 哈希,整个安装过程非常可控。
2. Windows 环境下的完整安装实操(推荐路线)
明确了版本和编译器之后,下面这段是 Windows 下最顺滑的安装路线。我会以 Qt 5.15.2 离线包 + MinGW 为主要示例,同时在 2.4 节补充纯命令行工具用户需要的配置方式。
2.1 下载离线包并校验文件:别省这五分钟
从镜像站下载时,注意认准文件名格式,官方离线包命名通常是qt-opensource-windows-x86-5.15.2.exe。如果你看到的是qt-unified-windows-x64-online-x.x.x.exe,那是在线安装器,别下错。
下载完别急着双击,先做两步。第一步,核对文件大小,如果镜像站标注了文件大小和 SHA-1 / MD5 哈希,用工具校验一下,避免下载过程损坏。第二步,确认当前磁盘空间足够,Qt 5.15.2 完整安装后占用大约 8-10GB,如果你只选常用组件,通常 3-5GB 也够,但我建议至少预留 10GB,因为后续还要缓存编译中间文件。
安装路径的问题我多说一句:虽然现在的 Qt 对中文路径容错好了很多,但传统经验是尽量放在纯英文、无空格的路径下,比如D:\Qt\5.15.2。有些第三方工具、CMake 脚本、脚本自动化工具对路径中的空格和中文处理不当,一旦遇到那种“明明代码没错但编译产出异常”的问题,排查一次的成本够你重装三遍 Qt。
2.2 组件勾选对照表:哪个必须装,哪个可以跳过
离线包双击后会弹出组件勾选界面。很多新手看到一串串英文复选框直接懵,要么全选,装到磁盘爆掉;要么只勾了第一个,装完发现连 Qt Creator 都没有。我整理一份经验导向的勾选清单,以 5.15.2 为例:
| 组件分类 | 建议勾选 | 说明 |
|---|---|---|
| Qt Core / GUI / Widgets | 必选 | 这三项是所有桌面应用的基础,不装等于没装 |
| Qt QML / Quick | 学习中建议选 | 如果你学 QML 界面开发,勾上;纯 Widgets 开发可以跳过以节省空间 |
| Qt Charts / Data Visualization | 按需 | 画图表、三维可视化才需要,很多开发向导类项目会用到 |
| Qt WebEngine | 不建议勾,除非明确需要 | 体积巨大,编译也慢,纯桌面应用基本用不上 |
| Developer and Designer Tools | 必选 Qt Creator,MinGW 按工具链需求选 | 这里的 MinGW 版本是给你当编译器用的,装了 MinGW 工具链就需要对应勾选 |
| CMake / Ninja | 建议勾上 | 新版 Qt 越来越依赖 CMake,装上省得后补 |
勾选组件时有几个点容易踩坑。第一,Qt Creator 和编译工具链是分开的,如果你只勾了 Qt 库本身没勾 Qt Creator,装完也找不到 IDE。第二,如果你需要 MSVC 编译环境,安装器里其实不会给你装 Visual Studio,它只能带着识别已有的 VS 工具链,所以 MSVC 用户必须先装好 VS 或 Build Tools 再装 Qt。第三,同一个 Qt 版本下可以勾多个编译套件,比如同时勾 MinGW 和 MSVC,但这容易让后续 Kit 选择变得复杂,新手建议先只勾一个。
2.3 安装后的三个自检动作:qmake、Qt Creator、示例工程
安装完成后先别急着写代码,花五分钟做三个检查,能帮你在源头排除八成环境问题。
第一步,打开命令行,输入qmake -v,正常情况下能看到 qmake 版本和它基于的 Qt 版本。如果提示“不是内部或外部命令”,说明 qmake 没进 PATH,或者你还没把 Qt 的bin目录手动加进去。对于离线包和在线安装器,Qt 通常会在自己的目录里写配置文件,让 Qt Creator 能自己找到 qmake,但命令行工具需要的 PATH 得自己处理。
第二步,打开 Qt Creator,在“工具 - 选项 - Kits - 编译器”里确认能看到对应编译器。如果 Kits 页面显示“No suitable kits found”,那基本可以确定是编译器没被识别。
第三步,新建一个默认的Qt Widgets Application,点“构建”,如果能顺利编译出一个空窗口并运行,那环境就算立住了。不要直接拿别人的工程试,第一轮先用官方模板验证环境,才能把“环境问题”和“代码问题”分开。
2.4 不需要 IDE?纯命令行工具集的手动配置方式
有些人不想用 Qt Creator,只想用 Qt 库加自己的代码编辑器(比如 VS Code),那只需要把 Qt 的bin目录加入系统环境变量,然后用 qmake 和编译器直接操作。
具体做法:右键“此电脑 - 属性 - 高级系统设置 - 环境变量”,在用户变量的Path里追加D:\Qt\5.15.2\mingw81_64\bin(路径根据你实际安装目录调整)。如果你用 MSVC 工具链,还需要在命令行里先执行 vcvars64.bat 初始化编译环境,然后再用 nmake 或 jom 构建。
这里有个小技巧:同一台机器如果装了好几个 Qt 版本,不建议把多个版本的bin都塞进 PATH,否则 qmake 到底指向谁全看环境变量顺序。更规范的做法是,每种项目在 Qt Creator 里指定单独的 Kit,命令行开发则在每次编译前临时添加 PATH,用完就关,互不干扰。
3. 编译器工具链补全与经典报错排查
Qt 本体装好只算完成一半,另一半在于编译器工具链的匹配。这一节重点聊 MSVC 场景下的工具链安装,以及一个在网上被搜索了无数次的经典报错::-1: error: dependent '..\..\..\..\..\..\qt\5.15.2\msvc2019_64\include\qtwid...'。
3.1 安装 MSVC 编译工具链:Build Tools 还是完整版 Visual Studio
如果你选的是 MSVC 工具链,必须先决定装完整版 Visual Studio 还是只装 Build Tools(独立编译工具集)。两者的核心区别在于:完整 VS 体积大、启动慢,但内置 IDE、调试器、C++ 开发组件一应俱全;Build Tools 则是“轻量编译器”,只装命令行编译能力,配 Qt Creator 足够。
如果你是纯 Qt 开发,装 Build Tools 更合适,省得被 VS 那庞大的界面和自动更新拖累。下载时在 Visual Studio 安装器里勾选“使用 C++ 的桌面开发”工作负载即可。注意 Qt 5.15.2 官方包对应的是msvc2019_64,也就是说官方预编译库是用 VS2019 工具集编的。如果你机器上装的是 VS2022,虽然大多数情况下能通过设置打开 Qt 5.15.2 项目,但最稳妥的做法是安装 VS2019 的编译工具集,保证 mkspec 和运行库完全对齐。
热词里出现的“vs2022 qt solutions”其实指的是 Qt 官方提供的 Visual Studio 集成插件。如果你坚持用 VS 做 Qt 开发,可以给 VS 装上 Qt VS Tools 扩展,用它来配置 Qt 版本路径。本质上它还是调用 Qt 的 qmake 和编译工具链,只是把 CMake 配置、跟随文件生成这些步骤的复杂度替你处理掉了。
3.2 破解经典 Qt 依赖报错:那个长长的 dependent include 到底在说什么
搜“qt 安装”进来的朋友,很多人其实是被这一类报错逼来的。报错长这样:
:-1: error: dependent '..\..\..\..\..\..\qt\5.15.2\msvc2019_64\include\qtwidgets/qstyleoption.h' does not exist.很多人一眼看到qt\5.15.2\msvc2019_64\include\qtwid...以为是不是自己的 Qt 安装坏了,或者文件缺失。我用一句大白话解释:这个报错说的是“编译器在按头文件依赖去找 Qt 头文件时,跑到了一个不存在的路径”。注意里面那个..\..\..的层级,说明这个路径是通过相对路径拼出来的,而相对路径的起点是编译器的当前工作目录。如果工作目录和你 Qt 安装路径的层级关系错位,编译器就会拼出一个不存在的路径。
这个报错最常见的触发原因是 Kit 选择不匹配。比如你安装的是 MinGW 版 Qt,但 Kit 里误选了 MSVC 编译器;或者你在 Qt Creator 里打开了一个为 MSVC 写的项目,但当前 Kit 是 MinGW;又或者项目工程文件里写死了某个 Qt 版本路径。编译器用 A 套的工具链去解析 B 套的 include 路径,路径层级当然会乱。
解决办法,按优先级操作:第一,在 Qt Creator 右下角或左侧的“构建套件选择器”里,切换到与实际编译器匹配的 Kit;第二,执行“清理项目”再重新 qmake,因为旧的 Makefile 和.pro.user文件里可能缓存了错误路径;第三,如果还不行,删除项目目录下的build文件夹和.pro.user文件,让 Qt Creator 重新构建配置;第四,检查.pro文件里是否有人为写死的绝对路径,把它改成相对路径。
这里我特别提醒一点:不要为了解决这类报错去手动改 Qt 安装目录里的文件结构。很多人一看 include 路径报错,就想去把msvc2019_64文件夹改名或者把 Qt 往工程目录里复制,结果越弄越乱。Qt 的头文件路径是 mkspec 和 qmake 自动推导的,你手动改目录结构,只会让 qmake 生成的路径更不符合预期。
3.3 环境变量与路径规范化:别让中文目录和空格成为隐患
Windows 上 Qt 开发的首选路径就是全英文、无空格。这不是玄学,而是编译工具链的现实约束。CMake 对路径中的空格处理得还行,但一些老旧的 make 工具、NMake、还有部分 Qt 插件源码里拼路径的方式对空格非常敏感。我自己就遇到过:一个项目放在D:\My Projects\Demo,用 Qt Creator 编译一切正常,但换到命令行手动 qmake 之后就报找不到文件,原因就是路径中的空格没被正确转义。
如果你的工作目录里已经带了中文或空格,别着急重新装 Qt,试验一下先把整个工程文件移动到一个D:\qtwork\demo之类的干净路径下,再重新构建。很多时候问题一下就消失了。
还有一个环境变量层面的细节:Qt 的编译过程中会读QTDIR或QMAKE这类变量,有些教程会教你把它们手动设到系统环境变量里。但对普通开发机来说,这些变量不是必须的,设了反而容易造成多个 Qt 版本之间的干扰。我更推荐的方式:让 Qt Creator 通过 Kit 管理 Qt 路径,命令行开发时在.bat脚本里临时设置环境变量,用完自动失效。
3.4 Qt 崩溃类问题的提前预警
“qt崩溃”能上热词,说明很多人在安装和开发阶段都触发了程序崩溃。我这里列几个高频场景,给你提前做心理建设。
场景一是 Qt Creator 本身启动崩溃。多半是 OpenGL 驱动兼容问题,Qt Creator 默认使用显卡加速渲染界面,老旧驱动或虚拟机环境容易崩。可以尝试在启动命令行加参数-software,或者修改环境变量QT_OPENGL=software,强制 Qt Creator 走软件渲染。
场景二是自己写的 Qt 程序一运行就崩溃。最常见的原因是 Debug 和 Release 的 DLL 混用,比如你用 Release 编译的程序,运行时却把Qt5Cored.dll(Debug 版)和Qt5Core.dll(Release 版)搞混了。排查方法很简单,用程序目录下实际加载的 DLL 版本和编译模式对照看一下。
场景三是 Qt 5.15.2 在特定 Windows 版本上弹“0xc000007b”错误。这个错误码通常表示 DLL 位数不匹配或缺少 VC 运行库。检查你的编译架构(x64 vs x86)是否和运行的 DLL 一致,同时装好对应版本的 Visual C++ Redistributable。
4. Ubuntu / Linux 平台安装与版本共存
Linux 上装 Qt 有两条截然不同的路径:一条是用发行版自带的包管理器,一条是下载官方安装器。两条我都用过,各自适合的场景差异很大。
4.1 apt 安装 vs 官网安装器:先看你要的版本在不在源里
用 Ubuntu 的apt install装 Qt 非常省事,但它有两个硬性限制:第一,源里的版本通常比官网慢很多,比如 Ubuntu 20.04 的默认源里是 Qt 5.12 或 5.14,如果你需要 5.15.2 这个版本,源里大概率没有,得通过其他方式补;第二,apt 源里只提供基础库(比如qtbase5-dev、qtdeclarative5-dev),插件和扩展模块得一个个手动装,非常零散。
所以我给 Linux 新手的建议是:如果是快速搭一个能编译 Qt 项目的环境,直接sudo apt install qtbase5-dev qt5-qmake qtbase5-dev-tools,够用;如果需要指定版本、指定组件,比如 5.15.2 完整开发环境,那直接下载官方安装器或离线包装到~/Qt下更靠谱。
Linux 下 Qt 官方在线安装器的运行方式是:先给安装文件加执行权限,然后./qt-unified-linux-x64-online.run。它会弹图形界面,流程和 Windows 基本一致。如果你的服务器是无桌面环境,可以用它带的命令行模式./qt-unified-linux-x64-online.run --default-answer --accept-licenses --confirm-command install qt.qt5.5152.gcc_64,这个方式对自动化部署很友好。
4.2 Linux 下安装时的依赖补齐:缺库报错怎么读
Linux 上 Qt 安装出错,十有八九是系统缺共享库。Qt 在图形界面模块会依赖 X11、OpenGL、xkb 等一堆底层库,缺一个,安装器就在启动或运行时报错。常见缺库报错长这样:error while loading shared libraries: libxcb-xinerama.so.0。
遇到这类报错,别慌,先按提示搜包名。比如缺libxcb-xinerama.so.0,在 Ubuntu 上通常执行sudo apt install libxcb-xinerama0就能解决。我给一套覆盖面比较全的依赖安装命令,直接复制执行基本能解决大多数缺库问题:
sudo apt update sudo apt install libgl1-mesa-dev libglu1-mesa-dev libxkbcommon-x11-0 libxcb-xinerama0 libxcb-cursor0 \ libxcb-icccm4 libxcb-keysyms1 libxcb-shape0 libxcb-render-util0 \ libxcb-image0 libxcb-randr0 libxcb-xkb1 libxkbcommon-dev libxcb-xfixes0 \ libxcb-xv0 libxcb-util1 libxcb-xinput0 \ libssl-dev libdbus-1-dev这里有个大坑要特别说明:Ubuntu 新版本(22.04+)上 Qt 5 的某些模块在运行时会提示qt.qpa.plugin: Could not load the Qt platform plugin "xcb"。这个报错经常让新手以为安装失败,实际上是因为libxcb-cursor0没装,Qt 6.2 之后的 QPA 插件硬性依赖这个库。装上之后问题立刻消失。
4.3 多版本共存:/opt、~/Qt 与 qtchooser 的管理哲学
Linux 下装多版本 Qt 是一件很自然的事,比如同时装了系统 apt 源里的 Qt 5.12 和官网的 Qt 5.15.2,开发时需要在两者间切换。两个版本其实可以共存,关键是不能让 qmake 的查找路径乱掉。
官方安装器默认会装到~/Qt目录,各版本各编译器按子目录放好:~/Qt/5.15.2/gcc_64/bin/qmake。apt 方式装的一般在/usr/lib/x86_64-linux-gnu/qt5/bin/qmake。
手动切换的方式是在~/.bashrc里定义别名:
export PATH="$HOME/Qt/5.15.2/gcc_64/bin:$PATH" export CMAKE_PREFIX_PATH="$HOME/Qt/5.15.2/gcc_64"但这样写死后,换版本就得改.bashrc。如果你需要更灵活的切换,可以用qtchooser工具,把不同 qmake 注册到配置文件中,然后用qtchooser -qt=5.15.2 -run-tool=qmake这种方式按需调用。不过我实测下来,日常开发总是固定在一个版本,反而没必要把切换搞得复杂。真正需要同时维护多版本的人,多半是同时在编译多个项目的 CI 环境,那种场景更推荐用 Docker 容器隔离。
5. 高频问题排查与实用速查表
把上面这些经验和踩坑经历浓缩成一份速查表,建议收藏。以后安装或编译遇到类似问题,直接对着排查。
| 问题现象 | 可能原因 | 快速解决 |
|---|---|---|
| Qt Creator 里看不到可用编译器,Kits 为灰色 | 编译器没装,或 Qt 版本与工具链不匹配 | 确认装了 MinGW 或 VS Build Tools;在“选项 - Kits - 编译器”里手动添加,匹配 qmake 路径 |
编译报dependent '..\..\qt\5.15.2\msvc2019_64\include\...' does not exist | Kit 选错,或构建目录缓存了错误路径 | 切换正确 Kit;清理 build 目录;删除.pro.user重新构建 |
qmake不是内部或外部命令 | Qt 的 bin 目录未加入 PATH | 把 Qt 的 bin 目录(如D:\Qt\5.15.2\mingw81_64\bin)加入系统 PATH,或使用 Qt Creator 内置命令工具 |
运行程序时报0xc000007b | DLL 位数不匹配或缺少 VC 运行库 | 检查编译架构与 DLL 架构一致性;安装对应 VC Redistributable;用Dependencies工具检查 DLL 依赖 |
Ubuntu 上程序无法启动,报Could not load platform plugin "xcb" | 缺libxcb-cursor0或同名系统库 | sudo apt install libxcb-cursor0 libxcb-*按需补齐后重新运行 |
编译时报Cannot find -lGL | 缺少 OpenGL 开发库 | Linux 执行sudo apt install libgl1-mesa-dev;Windows 检查显卡驱动,确认 OpenGL 可用 |
| Qt Creator 启动闪退或黑屏 | OpenGL 渲染兼容问题 | 用qtcreator -software强制软件渲染,或配置QT_OPENGL=software |
| 加装 MSVC 工具链后,旧工程编译报海量 error | 旧的构建缓存仍指向 MinGW | 删除工程 build 目录,重新构建;检查.pro文件中的QMAKE设置 |
| 卸载 Qt 不彻底,残留影响新版本安装 | 卸载工具未正确清理注册表、用户配置 | 用安装目录下MaintenanceTool.exe卸载;清理~/.config/Qt(Linux)或注册表中 Qt 相关项(Windows) |
再说一个容易被忽略的细节:Qt 安装目录里都有MaintenanceTool.exe,它不仅负责卸载,还能让你随时增删组件、更新版本。很多人卸载 Qt 时直接手动删文件夹,导致注册表和用户配置残留一大堆垃圾,下次装新版反而被旧配置干扰。正确做法永远是从MaintenanceTool走官方卸载流程。
最后分享一个我自己的工程习惯:拿到任何一台新电脑,我装 Qt 的顺序是固定的——先装编译器,再装 Qt 库,然后打开 Qt Creator 先配置 Kit,最后才新建测试工程。如果新机器上遇到诡异的环境问题,我第一步会看 Kit 选择和构建目录,而不是去动 Qt 安装文件。这个顺序帮我避开了无数看起来像“Qt 坏了”但其实是工具链误配的问题。
Qt 的安装从来不是单纯的“下载、双击、下一步”,它本质上是一个依赖管理问题。搞懂了版本、编译器、组件这三个维度的匹配逻辑,不管是 Windows 还是 Linux,不管你用 MinGW 还是 MSVC,你都能快速判断问题出在哪一环。希望这篇基于真实踩坑经验写出来的安装实践指南,能让你在第一次面对 Qt 时少走几步弯路。