ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Qt安装避坑指南:版本选择、编译器配置与报错解决

Qt安装避坑指南:版本选择、编译器配置与报错解决 1. 动手装之前先选对版本和编译器组合先说个我自己的教训。前几年帮同事处理一台新电脑他要装Qt做Windows桌面工具我直接甩了个在线安装器让他一路“Next”。结果他装完打开Qt Creator新建项目时发现没有任何可用的构建套件Kit编译按钮全是灰的——因为他在安装向导里一个编译器都没勾。后来重装了一遍白白浪费了两个小时。装Qt这事儿看着是个“下一步到底”的流程但真正决定速度快慢的是动手前那几分钟的规划装哪个版本、选哪套编译器、组件勾哪些。1.1 MSVC还是MinGW先搞清楚你的Windows环境Windows下最常见的编译器组合就两套MSVC和MinGW。简单说MSVC是微软的Visual C编译器需要系统里装有Visual Studio或者单独的Build ToolsQt的MSVC套件依赖VS的环境MinGW则是GCC在Windows下的移植版自带编译器装完就能用不需要额外装VS。怎么选看你的使用场景使用场景推荐套件理由做Windows桌面工具、对接Windows API、调用DirectXMSVC 2019 64-bit和Windows生态兼容最彻底很多第三方库默认编译MSVC版本纯图形界面、学习、小工具、不想装VSMinGW 8.1.0 64-bit装完开箱即用不占VS那好几个G的空间混合开发可能要在Linux/Mac交叉编译MinGW或MSVC都行建议保持跨平台代码风格编译器差异主要影响本地构建代码层面注意别用平台私有API我自己Windows主力机用的MSVC 2019 64-bit因为项目里经常要调一些Windows SDK的东西给朋友装学习用环境我会直接选MinGW省事。另外要注意如果你选择MSVC套件得先确认机器上有Visual Studio 2019或更新的Build Tools没有的话Qt的MSVC套件装了也白装检测不到编译器。这点在安装前就要确认不然又是“套件灰色”的下场。1.2 版本号怎么选别盲目追新网上搜“QT快速安装”经常有人直接装最新版。但实际项目里版本选择往往是“够用就好兼顾稳定”。我见过的组合大概这样Qt 5.12系列经典老将LTS长期支持MinGW和MSVC组件都很全很多老项目、教学视频都基于它社区资料最丰富。如果你要照着老教程操作选5.12踩坑最少。Qt 5.14.2bug修正版比较稳健5.15之前的过渡选择。如果你需要打开某些较新的CMake项目又不想上6.x可以用它。Qt 5.15.25.x系列最后一个LTS官方对开源用户的在线安装包、离线包支持都比较成熟也是很多人“稳定不乱升级”的主力版本。我自己现在Windows上保留的就是5.15.2配合msvc2019_64套件。网上那些报错信息里..\qt\5.15.2\msvc2019_64\include\qtwidget路径出现频率很高说明这个版本普及度确实大。Qt 6.x系列新架构重绘了很多底层模块API和5.x有差异。好处是长期支持、性能更好坏处是不少老教程、老第三方库可能不支持。如果你是全新项目、没有老代码包袱可以选想快速上手照着老资料做还是5.15.2稳。我的建议很直接第一次用Qt或者想快速装完就干活直接用Qt 5.15.2的MSVC 2019 64-bit/MinGW套件。别拿自己当小白鼠也别为了“新”给自己挖坑。1.3 先规划目录再动手避免C盘爆红这事儿不起眼但特影响心情。Qt的安装目录默认在C:\Qt每个版本加各部分组件轻轻松松十几个G。我见过有人装完5.12又装5.15C盘直接变红然后整个开发环境开始各种卡。建议装之前规划好目录比如D:\Qt\5.15.2这种结构。理由很简单一是避免系统盘空间紧张二是Qt本身的工具比如windeployqt、MaintenanceTool依赖目录结构放到非中文、无空格路径下最省心。另外中文用户名或带空格的路径会导致部分工具链出问题这个我在1.1提过的编译套件识别失败里也遇到过。你的Windows用户名是中文或者系统装在C盘快到阈值那动手前先解决这两个问题比你后面排查半天都快。2. 下载渠道与镜像加速别在官网死磕很多人卡在“快速安装”的第一关就是下载。Qt的官方在线安装器本身在部分地区访问慢加上安装器体积大有时候卡在进度条上能急死人。这个问题的解法很成熟用国内镜像。我在清华源下载时速度能跑到满带宽同一个安装器挂官网五分钟都不带动一下的。2.1 官网下载器和镜像站怎么配合Qt官方提供统一的在线安装器文件名叫类似qt-unified-windows-x64-4.8.0-online.exe之类的东西。它本身是个“下载器”实际安装时再根据你勾选的组件从官网拉数据包。因为数据源在国外国内网络环境下一卡一卡的。解决办法用镜像站的地址或在安装器里指定镜像仓库。实际操作上我不太建议新手折腾在线安装器里加镜像源的参数直接去清华源下载离线包更省事。镜像站页面提供的文件分两类一类是online_installers目录下的在线安装器另一类是archive目录下偏老的安装包里面能看到qt/5.15.2/这种版本目录。5.15.2的离线安装器文件是qt-opensource-windows-x86_64-5.15.2.exe在存档目录里有。下载后用这个离线安装包做的最大好处是它是完整安装包后续不再从外部拉数据装多快取决于你磁盘速度而不是网络。2.2 镜像页面上那些文件夹到底是什么意思第一次去镜像站的人很容易懵archive、online_installers、snapshot……到底进哪个我常看的结构是这样archive历史版本的完整存档里面按大版本分文件夹如archive/qt/5.15/5.15.2/往里找适合你平台的安装文件。想快速获取稳定版主要来这里。online_installers较新的在线安装器存放点适合你想要最新版、并愿意用Qt官方在线安装流程的场景。snapshot开发快照非必要不建议碰稳定性没保证。下载的时候留意文件名里的平台标识windows-x86_64就是64位Windows版linux-x64是Linux版。选错平台浪费时间我见过有人下载了Linux安装包在Windows上还跑来问为什么打不开的真不是段子。2.3 离线包和MaintenanceTool的关系离线包安装完会在安装目录下生成一个MaintenanceTool.exe部分历史版本叫MaintenanceTool。这个工具非常重要它可以增删组件、更新组件、甚至卸载整个Qt。比如你当前用5.15.2想再补装一个Qt Charts模块不用重新下载整个安装包直接打开MaintenanceTool它会自动通过你预先设置的软件源地址拉取数据。这个工具我后面还会重点讲。下载环节还有一个建议安装器下载完先校验一下SHA/SHA256。官方页面和镜像站点一般会给出校验值。我第一次下载某版本5.12的离线包时因为网络抖动下载文件损坏安装到一半报错浪费了不少时间后来养成下载完先PYTHON或系统工具算一次SHA256的习惯虽然多花十几秒但避免了反复重装。3. 安装向导逐项过组件勾选才是重头戏下载完毕双击安装包。如果装的是官方在线安装器第一步会让你登录Qt账号——没账号得注册这块卡住的人不少。离线包则很少涉及强制登录这也是我推荐离线包的原因之一。安装过程中真正有技术含量的是组件选择页面。这一步选多选少直接影响你后续能不能快速编译出东西。3.1 组件勾选策略按用途来不是全勾组件页面分成几大块左边是Qt版本比如5.15.2展开后里面有各种子模块往下还有Tools区编译器、CMake、Qt Creator等。新手最容易犯的错是“全都勾上”几十个G一会儿就过去了还拖慢安装速度。更合适的做法是只勾你要用的但编译器一定要勾。如果你跟我一样是Windows MSVC路线至少勾这几样Qt 5.15.2下的MSVC 2019 64-bit如果你有VS2019环境或MinGW 8.1.0 64-bit如果你走MinGWQt CreatorIDE本体有时候会自动带上调试工具和Qt Debug Information Files如果选项里能看到勾上崩溃调试能省事你项目里需要的模块比如做图表就用Qt Charts做Web嵌入就用Qt WebEngineQt Charts这个好几个朋友问过默认安装往往不勾但你在项目文件里用了QT charts编译时一堆“找不到头文件”的报错就是因为没装对应模块。同理Qt Data Visualization、Qt WebEngine这些模块按需勾。别全选也别漏选项目里需要什么装什么。3.2 “Developer and Designer Tools”里都藏着什么组件列表里还有一个容易被忽略的区域叫Developer and Designer Tools或类似的Tools部分里面包含Qt Creator XXXIDE可视化开发环境界面设计器Qt Designer也集成在里面。MinGW XXX编译器你选MinGW套件的话这里会出现对应版本的编译器必勾。选MSVC时这里则不需要因为编译器在Visual Studio里。CMake新版Qt Creator和很多现代项目默认用CMake构建系统不装的话打开CMake工程会提示找不到CMake。Ninja可选的构建后端装了能加快部分项目的编译速度。勾选时有几个“必点”我心里有数MinGW路线就勾MinGW编译器不管什么路线CMake最好勾上。这样后面打开别人给的CMake工程不会卡在“No suitable kit found”这种问题上。3.3 安装路径与目录结构的一次到位安装向导里有一步是选择安装目录。我建议直接指定到类似D:\Qt这样的非系统盘。和1.3说的一样别用带空格、带中文的路径也别用默认的C盘。装完以后目录下会形成类似下面的结构D:\Qt\ 5.15.2\ msvc2019_64\ bin\ include\ lib\ plugins\ qml\ ... Tools\ QtCreator\ CMake_64\ MinGW...bin目录下就是qmake.exe、windeployqt.exe这些命令行工具。后面配置环境变量、部署程序都要用。这个结构你熟悉了出问题的时候找路径也快。安装过程的第3步到第5步一般很快慢的是组件下载和解压。离线包会好很多。装完后建议先别急着关看一下有没有“Setup completed”之类字样如果中途报错截图记录再排查——最常见的错误是磁盘空间不足或权限不足给安装程序“以管理员身份运行”往往能解决后一个。4. 安装后的环境变量与构建套件自检装完Qt只是第一步真正决定“有没有装好”的是你能不能成功创建一个项目并编译运行。很多人卡在这一步要么环境变量没配要么构建套件识别失败。快速判断安装环境是否可用我有套完整的自检流程。4.1 PATH和QTDIR设置实践Windows下Qt的很多工具比如qmake、moc、uic在bin目录里。如果你希望命令行里直接敲qmake就能用建议在系统环境变量里做两件事新建一个环境变量QTDIR值填Qt版本所在的根目录比如D:\Qt\5.15.2\msvc2019_64。这样第三方工具链能自动找到Qt的位置。把Qt的bin目录追加到PATH比如D:\Qt\5.15.2\msvc2019_64\bin。这样qmake.exe、windeployqt.exe等工具才能在任意终端里直接调用。注意不同套件的bin目录不同别配错。配置完最好重新开一个cmd或者PowerShell窗口让环境变量生效。然后跑一下qmake -v如果提示找不到命令多半是PATH没生效或路径配错了。C:\ qmake -v QMake version 3.1 Using Qt version 5.15.2 in D:\Qt\5.15.2\msvc2019_64\lib出现这个说明环境变量没问题。如果提示找不到先检查路径里是否有空格或中文这类问题最坑人。4.2 命令行编译第一个小程序环境变量配好我习惯用一个“最小可编译项目”验证整个工具链。创建一个文件夹比如D:\tmp\hello_qt里面放一个main.cpp#include QApplication #include QLabel int main(int argc, char *argv[]) { QApplication a(argc, argv); QLabel label(Qt installed and working!); label.resize(300, 100); label.show(); return a.exec(); }再放一个hello_qt.proQT widgets SOURCES main.cpp然后在命令行里执行qmake mingw32-make如果你用的MSVC套件编译器命令可能是nmake。看到生成hello_qt.exe后直接运行窗口弹出来就算全链路通了。这一步虽然比“在Qt Creator里点运行”麻烦点但能快速确认环境本身没问题——一旦后续在Qt Creator里遇到编译失败你就知道是Creator配置或Kit的问题而不是整个安装环境的问题。4.3 Qt Creator的Kit识别与手动修正双击打开Qt Creator它会在“工具→选项→Kits构建套件”里自动扫描编译器、Qt版本、CMake等。点开Kits页面看你的套件是不是带黄色警示图标。如果编译器一栏显示“No compiler”说明你虽然装了MinGW或MSVC但Qt Creator没识别到。常见原因安装Qt时没有勾选MinGW编译器组件在Tools下或者MSVC套件对应的VS版本有缺。安装路径里带中文/空格导致扫描异常。新装完组件Qt Creator没有重新扫描重启一下即可。手动修正也很简单在Kits页面点“手动设置”Compiler页签里添加编译器路径比如MinGW的g在D:\Qt\Tools\mingw810_64\bin\g.exe然后Qt Versions页签里添加qmake.exe路径最后回到Kits把三者关联起来。关联完点一下右下角“Apply”新建项目时这个Kit就能用了。这一点坚持下来能省很多时间装完不一定立刻写代码但一定要先自己建一个空项目试编译。空项目能过后面业务代码慢慢写空项目都过不去就先把环境修好否则你写的所有代码都会堆在“编译不过”这个泥潭里。5. 最经典的安装后翻车现场qt.qpa.plugin报错如果上面自检全过了恭喜你的开发环境基本就绪。但你别急着发布软件——因为发布阶段还有一个超高频率的报错网上搜“QT快速安装”出来一堆相关热搜词其中就有这个“qt.qpa.plugin: could not find the Qt platform plugin windows in ”。这个错我踩过也帮别人查过很多次今天详细拆一遍。5.1 报错长什么样根因就是没找到platform插件你双击一个编译好的Qt程序如果它弹出类似这样的黑色命令行窗口并报错qt.qpa.plugin: could not find the Qt platform plugin windows in This application failed to start because no Qt platform plugin could be initialized.原因是Qt的窗口系统是通过动态加载bin上一级的plugins\platforms目录下的插件比如qwindows.dll来实现的。发布时如果只把exe拷走没带platforms文件夹程序找不到“创建窗口的底层插件”自然崩。如果你是在开发环境里跑源码编译出来的程序也遇到这个错还有一种情况环境变量QT_QPA_PLATFORM_PLUGIN_PATH没设置或者指向了不存在的路径。此时Qt在空路径里找插件找不到才报这个错。我排查过不少拿到别人源码、自己编译后运行报这个错的情况十有八九是因为没有在程序里设置插件目录或者用Qt Creator跑时Creator没自动注入。5.2 修复手段按顺序试针对不同阶段修复方法不一样开发时运行报错在main函数里或在调用QApplication之前先设置插件目录。比如#include QApplication #include QDir int main(int argc, char *argv[]) { QApplication::setLibraryPaths(QStringList() QDir::current().filePath(plugins)); // 或者指定到本地Qt安装目录的plugins QCoreApplication::addLibraryPath(QStringLiteral(D:/Qt/5.15.2/msvc2019_64/plugins)); QApplication a(argc, argv); // ... }不过更常见的做法是配置好QT_QPA_PLATFORM_PLUGIN_PATH环境变量指向D:\Qt\5.15.2\msvc2019_64\plugins\platforms然后重开程序。这个变量是让Qt在运行期能找到插件所在的额外搜索路径。发布时运行报错把plugins\platforms整个文件夹复制到exe同级目录并确保qwindows.dll在里面。发布目录结构一般是这样发布目录\ MyApp.exe platforms\ qwindows.dll如果没有platforms文件夹程序双击就报上面的错。很多新手在“发布”这一步懵掉就是这个原因。Qt自带的部署工具windeployqt.exe干的就是这件事自动帮你把exe依赖的Qt DLL、插件目录、平台插件、样式插件等一次性补齐。用法很简单在命令行里切换到exe所在目录执行windeployqt MyApp.exe它会自动处理大部分部署问题包括platforms目录。发布前跑一次这个命令是必要条件不是可选操作。不过依赖了非Qt的第三方库时windeployqt管不了得自己拷贝。5.3 发布时的其他坑Control别只在开发机上是好的除了platform插件发布时最常见的就是“在开发机上一切正常考到别的机器上就崩溃”。Qt的发布有一个基本原则dev机器上安装了多少依赖发布包里就得有对应的运行时DLL。比如你用MSVC编译可能需要把libgcc、libstdcMinGW路线或对应的VC运行时库带上。用windeployqt处理完以后最好先在一台干净虚拟机或没装Qt的机器上跑一遍验证是不是真的“绿色免安装”。我之前有一次发布工具在开发机上双击很流畅拷到客户电脑上直接闪退后来查半天发现是少了icudt*.dll就是因为发布时没完全跑完windeployqt而且依赖了ICU模块但没带上相关文件。这个小插曲让我记住了发布前的干净环境验证比什么都重要。6. 换个系统再来一遍Ubuntu与国产系统下的快速安装“QT快速安装”这个需求不只出现在Windows上。最近几年Linux桌面要跑Qt开发的越来越多Ubuntu是最常见的开发环境也有在国产桌面系统比如基于Debian系的麒麟系统上装Qt写应用的需求。有些细节和Windows差异很大我分别说下最快路径。6.1 Ubuntu下最省事的Apt安装方式Ubuntu下安装Qt开发环境优先级最高、最快的是系统包管理器。以Ubuntu 22.04或基于它的发行版为例终端执行sudo apt update sudo apt install qtbase5-dev qtchooser qt5-qmake qtcreator这几行装完你就有Qt5开发库、qmake和一个能用的Qt Creator。想确认装的是哪个版本执行qmake --versionUbuntu 22.04仓库默认大概是Qt 5.15.x够学习和小型项目用了。这种方式速度奇快但有个局限仓库包未必覆盖所有Qt模块比如Qt Charts可能要额外装libqt5charts5-dev。如果你要装的是最新版Qt 6或更完整的模块就得去用官方在线安装器或者自己从源码编——后者我不建议新手碰太容易消耗耐心。Apt装的另一个好处是依赖处理很干净不用手动配环境变量系统路径里直接就能用qmake和qtcreator。6.2 用官方安装器装Linux版需要注意的权限问题如果你需要特定版本比如5.12、5.15.2的非系统默认版本从下载页拿qt-opensource-linux-x64-5.15.2.run之类的文件给执行权限后运行chmod x qt-opensource-linux-x64-5.15.2.run ./qt-opensource-linux-x64-5.15.2.run图形界面画风跟Windows版基本一致组件选择逻辑也一样。要注意的是Linux下如果遇到“Qt platform plugin”相关报错检查一下libxcb*相关的依赖是否齐全——Linux的Qt窗口系统依赖X11缺了XCB库Qt起不了界面。根据报错信息用apt install --fix-broken或手动补装依赖包通常能解决。以及如果是远程SSH/容器环境想跑GUI还要配置X11转发这个就是纯环境问题不在安装范畴内。很多Linux上编译Qt程序时还会遇到“找不到头文件”“找不到Qt库”的错多半没装开发符号包。用Apt时安装带-dev后缀的包如果用.run包就检查安装时是不是没勾对应模块。Linux下环境配置没有Windows那么依赖PATH变量但如果你手动编译时报错找不到Qt5Widgets/QtWidgets先检查pkg-config能不能找到Qt5pkg-config --modversion Qt5Widgets找不到就装libqt5widgets5相关开发包。这一类问题都是“基础依赖没补齐”比Windows简单但新手会绕圈。6.3 在国产系统上走在线安装的实际操作国产桌面系统如麒麟系常见的底层还是类似Debian的包管理终端里sudo apt的用法通常还在。先确认系统架构是x86_64还是aarch64比如飞腾、鲲鹏平台的机器。如果是aarch64安装时丰俭由人能直接用系统仓库装Qt的话sudo apt install qtbase5-dev qtcreator基本能通如果仓库里没有你要的版本到Qt下载页找linux-aarch64对应的在线安装器运行后组件选择和Windows/Linux一致装完后如果出现菜单栏中文乱码或字体异常检查系统有没有装中文字体如文泉驿、Noto CJK缺了字体不一定会导致安装失败但界面看着确实难受。国产系统上有时会遇到Qt Creator启动后白屏/黑屏多半是显卡驱动或OpenGL实现的问题。Qt Creator的启动模式可以在快捷方式里加-platform xcb或用软件渲染模式。这个经验是从实践中试出来的QT_OPENGLsoftware qtcreator能强制走软渲染界面基本能出来。当然如果系统本身有没有正确安装GPU驱动还是先解决驱动问题更根本。7. 卸载、清理与版本共存装坏了怎么优雅回滚“快速安装”的另一个隐含问题是装错了怎么快速卸掉或者怎么让多个版本和平共处。我见过有人装完6.0又想退回5.15直接在文件管理器里把C:\Qt文件夹删了结果文件被占用删不干净重新装又各种残留问题。正确解法其实很简单。7.1 MaintenanceTool的正确打开方式Qt安装目录下有个MaintenanceTool.exe它以管理员身份运行后提供三项核心功能添加或移除组件想补装Qt Charts、想删除没用的模块走这一步。更新组件小版本更新、补丁更新走这里。卸载全部组件彻底移除当前安装的这套Qt。卸载时它会扫描已安装组件并列出清单确认后逐步卸载。如果你要彻底“清掉重来”先运行MaintenanceTool卸载组件卸载完再检查残留这不比手工删除省力得多。注意在线安装器版本的MaintenanceTool需要联网离线包安装的话它可能提示“需要在线更新”这时候得让它通过镜像源访问或者另外处理但5.15.2那代离线安装器的MaintenanceTool基本是能用的。7.2 卸载后的残留处理MaintenanceTool卸载完并不意味着机器上干干净净。残留主要在几个地方C:\Users\你的用户名\.qmake.conf、.qmake.cache这类隐藏配置旧的qmake路径信息可能留着C:\Users\你的用户名\AppData\Roaming\QtProject、QtCreator等配置目录记录了旧的Kit信息注册表里的HKEY_CURRENT_USER\Software\QtProject、HKEY_CURRENT_USER\Software\Digia等键值如果卸载后重新安装不同版本发现Qt Creator里还残留旧Kit或者编译时弹出旧路径最好把这些用户目录下的Qt相关配置也清掉。我操作时会先备份整个用户目录下的QtProject/QtCreator配置确认新版本没问题了再删毕竟里面可能有你精心配的代码风格、快捷键。7.3 多版本共存的目录放法和切换技巧有时候你要同时用5.12和5.15一个项目必须老版本编译另一个项目需要新模块。多版本共存完全可行只要注意安装时把版本放在独立的子目录比如D:\Qt\5.12.12、D:\Qt\5.15.2不要覆盖安装成同一目录。环境变量QTDIR每次指向你当前要用的版本。或者更简单不设全局QTDIR直接在Qt Creator的项目构建设置里指定每个项目用哪个Qt版本Kit级别指定。命令行里切换版本更推荐用Qt自带的qtchooserLinux下有Windows可以手写个小脚本改PATH。Windows下我习惯做一个switch_qt.batecho off set QTDIRD:\Qt\5.15.2\msvc2019_64 set PATH%QTDIR%\bin;D:\Qt\Tools\QtCreator\bin;%SystemRoot%\system32要用5.12就同理改成5.12的路径。这个脚本只对当前终端生效不影响其他程序实测下来多版本切换最顺手。多版本并存时最容易踩的坑是在Qt Creator里新建项目时Kit指定了Qt版本但编译时编译器却用错了顺序。比如MSVC 2019套件配了5.15.2的qmake但链接器还是找Visual Studio里的默认版本。这类问题多半在Kit配置里就能解决把Compiler、Qt Version、CMake三者明确对应到同一套链上别让Qt Creator自动匹配一个模棱两可的配置。最后再分享一个我自己的习惯装完Qt第一件事建一个最小窗口程序编译运行成功后再拷贝到另一台没装Qt的机器上跑一遍。前者验证开发环境后者验证部署依赖。这样处理过后后续写业务代码时才不会被底层环境问题反复打断。装Qt这件事本质不是“点几下Next”能搞定的而是在合理规划下把版本、编译器、组件、运行时这四样东西一次配齐。你把这套流程走顺了以后不管Windows还是Linux装什么环境心里都有底。
返回列表