ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

QT 5.14.2与VS2019搭配指南:Windows C++桌面开发环境配置详解

QT 5.14.2与VS2019搭配指南:Windows C++桌面开发环境配置详解 1. 版本搭配背后的关键逻辑先说结论QT 5.14.2搭配VS2019是Windows环境下做C桌面客户端开发很经典的一套组合。我看到后台收到不少朋友的私信问我为什么推荐这个版本而不是最新的QT 6.x或者直接用MinGW编译器凑合。这里面的门道我展开讲讲。首先是QT版本的选择逻辑。QT 5.14.2发布于2020年初属于QT 5.14系列的第二个补丁版本稳定性相当好。它最大的一个优势在于它是最后一个提供独立离线安装包的版本。从QT 5.15开始官方主推在线安装器你必须登录账号、联网下载组件对于网络环境不太稳定的朋友来说体验非常煎熬。而5.14.2的离线安装包大约2.3GB下载完以后直接双击安装无需登录无需联网装机效率高出一大截。我当年给公司十几台工控机批量部署开发环境靠的就是这个离线包。然后是编译器选型的问题。Windows上跑QT编译器无非两条路线MinGW和MSVC。MinGW是GCC在Windows下的移植安装简单但调试体验一般调试信息不如MSVC完整而且后期对接Windows原生API、调用第三方库的时候经常会遇到ABI兼容性问题。MSVC是微软自家的编译器和Windows生态结合最紧密调试能力强企业级项目基本都用它。QT官方在Windows平台上对MSVC的支持优先级也更高很多预编译模块只提供MSVC版本。具体到版本对应关系这里必须说清楚QT版本官方预编译组件对应编译器适用VS版本QT 5.14.2msvc2017_64MSVC 19.16VS2017、VS2019QT 5.14.2msvc2017_32MSVC 19.16VS2017、VS2019QT 5.14.2mingw73_64GCC 7.3不依赖VS注意这个表里msvc2017_64对应的编译器版本它虽然不是专门为VS2019做的但MSVC工具集具备向后兼容性VS2019完全可以直接使用这套预编译库这也是我们能够组合成功的基础。2. 下载和安装QT 5.14.22.1 离线安装包获取方式打开QT官方下载页面时不要急着在首页找“Download”按钮那些通常指向在线安装器。直接进到archive目录路径大概是archive/qt/5.14/5.14.2/。在这里能看到各个平台对应的安装包Windows平台选择qt-opensource-windows-x86-5.14.2.exe大约2.3GB。下载完成后双击启动安装。第一次打开会需要一个QT账号但这个版本可以直接跳过登录步骤也可以随意填个邮箱走注册流程。我实测下来在登录界面直接点击“Skip”按钮可以绕过强制登录直接进入安装目录选择界面这是离线包的一大便利之处。注意如果你下载的是exe格式打开后报“已损坏”或“无法识别”先检查一下是不是下载过程中文件被拦截或篡改重新下载即可。这个版本支持断点续传的下载工具大多能用。2.2 组件勾选的正确姿势安装QT 5.14.2时组件选择界面非常容易让人迷惑默认勾选的组件很多但真正必需的其实没几个。我直接给出我的选择方案组件类别具体项目是否勾选原因QtMSVC 2017 64-bit必选这是和VS2019搭配的核心预编译库QtMSVC 2017 32-bit按需需要编译32位程序时勾选QtMinGW 7.3.0 64-bit可选不推荐我们走MSVC路线用不到ToolsQt Creator必选官方IDE调试方便ToolsQt Creator CDB Debugger Support可选如果没有Windows SDK/调试器可能用不上ToolsMinGW 7.3.0不建议避免混用方式除非有特殊需求QtSources建议勾选源码不多但想看底层实现时很管用这个选择方案的思路很明确只需要MSVC 2017 64-bit一套预编译组件就够用了。我见过很多人图省事把所有选项都勾上结果安装体积从3GB膨胀到10GB实际开发中那些组件碰都不会碰纯属浪费磁盘和安装时间。勾选完后指定安装目录建议路径保持简单比如D:\Qt\Qt5.14.2或C:\Qt\Qt5.14.2千万不要出现中文路径和空格。虽然中文系统偶发能用但遇到第三方工具链、脚本解析时大概率会踩编码的坑。装完以后进入到安装目录下的5.14.2\msvc2017_64\bin能看到qmake.exe和一大堆QT运行库dll这就说明安装成功了。3. VS2019安装与关键组件配置3.1 安装VS2019时最容易忽略的负载QT 5.14.2的msvc2017_64组件只提供了QT的库文件它自己不带编译器。真正负责把C源码编译成机器码的MSVC工具集必须通过VS2019安装。而VS2022和VS2019之间的工具集版本不同也是很多人在之后配置Kit时报错的原因所以这一步不能跳。下载VS2019社区版Community微软官网直接搜“Visual Studio 2019 Community”就能找到。安装时的工作负载选择这里是最关键的环节。很多人下意识地勾选一堆组件什么Python开发、Node.js开发、UWP负载其实都无所谓。QT 5.14.2要正常工作只需要确保这一项被勾上“使用C的桌面开发”Desktop development with C。注意勾选了这个负载之后右侧的“安装详细信息”面板里默认会勾选“适用于最新v142生成工具的C MFC”和“C ATL”等。如果是纯QT开发这些MFC/ATL用不上但留着也没坏处空间不大的话就不用管。真正需要确认的是下面三项MSVC v142 - VS 2019 C x64/x86生成工具这就是核心的MSVC编译器必选。Windows 10 SDK提供Windows API头文件和调试库QT程序链接系统API时依赖它必选。C CMake tools for Windows如果以后想用CMake构建QT项目建议一并勾上但只做qmake开发可以先不选。安装过程比较久一般需要20到40分钟可以在等待的同时把QT的安装包准备在旁边。补充一个我踩过的坑如果你机器上同时装了VS2017和VS2019QT 5.14.2照样能工作因为msvc2017_64这套二进制库对VS2017和VS2019的编译器都兼容但如果你用的是VS2022那就不能直接使用这套预编译库了得自己重新编译QT源码工程量完全不同。3.2 Qt VS Tools扩展的安装与配置QT官方为了让程序员直接在Visual Studio里开发QT程序专门写了一个名为“Qt VS Tools”的扩展插件。装好VS2019后建议立刻装这个插件后续在Visual Studio中编辑代码、编译、调试都离不开它。安装方式有两种方式一在线安装。打开VS2019菜单栏选择“扩展” - “管理扩展”在右侧搜索框输入“Qt Visual Studio Tools”找到后点击下载安装重启VS生效。方式二离线安装。先从QT的官方仓库下载对应版本的.vsix文件然后在VS2019菜单栏选择“扩展” - “管理扩展” - 右上角“更多操作”按钮选择“Install from VSIX”选中该文件完成安装。这种方式适合无法通过在线市场安装的环境速度也更快。装好以后菜单栏会出现一个“Qt VS Tools”项。打开以后选择“Qt Versions”进行配置点击“Add new Qt version”路径指定到D:\Qt\Qt5.14.2\5.14.2\msvc2017_64也就是包含lib、bin、include等子目录的那一层。添加完成后VS会自动识别此目录下的qmake.exe。这样一来你在VS里新建QT项目时就能正确调用到qmake和QT库了。这里有个细节Qt VS Tools配置的“Qt Version”和“Qt Creator里的Qt Version”是两套独立的配置但原理相同——都是告诉工具链“QT的库和头文件在哪里”。两个地方都配置好才能双保险。4. Qt Creator环境中Kits编译套件配置4.1 第一次启动时的编译套件检测QT 5.14.2自带Qt Creator 4.11.0安装完以后从开始菜单打开它。第一次启动Qt Creator会做一系列环境检测包括编译器、调试器和Qt版本。正确安装VS2019并且勾选了“C桌面开发”的情况下Qt Creator会自动检测到MSVC 2019 64bit编译器和CDB调试器并在“Tools” - “Options” - “Kits”页面生成一个名为“Desktop Qt 5.14.2 MSVC2017 64bit”的编译套件。如果这个套件没自动生成说明某个步骤漏了。我先把Kits页面的关键概念说清楚方便排查Qt Version指向QT的预编译库目录比如D:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin\qmake.exe。这一步缺了所有和QT有关的项目都会报“qmake not found”。Compiler指向MSVC编译器一般会自动定位到C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\bin\Hostx64\x64\cl.exe。路径里的版本号可能不同但只要是这个形式就是对的。Debugger指定调试器MSVC配套的是CDB路径在Windows SDK目录下自动检测基本能命中。三个组件都齐了编译套件才能亮绿灯。如果Compiler和Debugger显示黄色感叹号或灰色不可选多半是VS2019安装时没勾C开发负载补装即可不需要重装整个VS。4.2 通过一个空窗口程序验证整条链路装好环境后第一件该做的事就是跑通一个最小的QT程序。很多新手上来就上手业务代码写完才发现环境有问题此时报错信息夹杂在自己代码里排查难度直接翻倍。我的建议是先新建一个默认的QWidget工程来验证环境链路。过程很简单打开Qt Creator点击“New Project”选择“Application” - “Qt Widgets Application”。项目名称填HelloQt路径选择一个纯英文目录。构建系统选择qmake不建议一上来就选CMake先跑通最基础的。在“Kit Selection”页面勾上“Desktop Qt 5.14.2 MSVC2017 64bit”这个套件其他反选。点击“完成”等待项目自动生成。此时Qt Creator会生成全套的.pro工程文件和main.cpp默认main函数里创建了一个QApplication和一个显示“Hello World”的窗口。直接按快捷键Ctrl R运行如果弹出窗口、没有任何报错那么QT和VS2019的搭配链路就已经完全通了。假如运行时报错最典型的是弹窗提示“由于找不到Qt5Core.dll无法继续执行代码”这说明程序运行时找不到QT的运行库问题不在编译而在环境变量。解决办法是把QT的bin目录加入系统PathD:\Qt\Qt5.14.2\5.14.2\msvc2017_64\bin但注意用Qt Creator运行时它内部会自动注入这个路径所以这个报错通常出现在直接双击exe运行的场景下。开发调试期间用Qt Creator没这个问题等以后脱离Creator跑程序时再考虑打包或配置Path的事。5. VS2019中直接调用QT库实现原生C开发5.1 新建立项和子类化控件的完整流程完成了Qt Creator的验证环境就算装好了但作为一名经常在Windows下搞C开发的程序员我更习惯直接通过VS2019来写QT程序。这里跟上面提到Qt VS Tools扩展沾边我按自己的常用流程走一遍。打开VS2019新建项目选择“C” - “Qt”分类。如果Qt VS Tools扩展安装成功这里会出现“Qt Widgets Application”等模板。选中之后向导会让你勾选所需模块比如Qt Core、Qt GUI、Qt Widgets默认全选即可。然后指定Qt Version这个时候下拉框会列出你之前配置好的msvc2017_64版本。接着你要做的是去掉Visual Studio自带的“Windows桌面应用程序”向导生成的那套入口逻辑因为QT程序自己有一套main函数的启动流程。新建QT工程后如果发现生成的main.cpp内容不对直接替换成标准QT入口#include QApplication #include QPushButton int main(int argc, char *argv[]) { QApplication a(argc, argv); QPushButton button(Hello from VS2019 QT); button.resize(280, 80); button.show(); return a.exec(); }编译运行之前确认一下VS顶部工具栏的配置管理器显示的是Debugx64。切换到Release也没问题但调试信息不会包含断点信息不利于调试。5.2 调试配置和x64/x86平台切换VS2019默认新项目的活动解决方案平台通常是Win32或x64。QT 5.14.2的msvc2017_64组件只支持64位所以新项目必须切到x64平台否则链接阶段会报LNK1112: 模块计算机类型x64与目标计算机类型x86冲突之类的错误。切换方法顶部菜单“生成” - “配置管理器”在“活动解决方案平台”下拉框选择x64。如果下拉框里没有就点“新建”并添加x64平台。这一步做完后编译、调试就能无缝接入了。我这里强调调试是因为很多人喜欢用Qt Creator调QT代码其实VS2019的调试体验更成熟特别是涉及到多线程问题、内存泄漏的时候VS的“诊断工具”和“并行堆栈”窗口比Qt Creator强不少。我个人习惯是界面设计、信号槽编写、qss样式调试放Qt Creator一旦涉及底层逻辑、性能分析、内存排查就切到VS2019来做。6. 编译原理与路径配置深度解答6.1 MSVC动态库和运行时的匹配机制很多人对QT 5.14.2的msvc2017_64为什么能跑在VS2019环境感到困惑这里我把背后机制讲透能帮你解决未来90%的“奇怪问题”。MSVC编译器从VS2015到VS2019的C运行库二进制兼容也就是说用VS2015、VS2017或VS2019编译出来的C代码可以混合链接彼此的目标文件和库文件。QT官方在发布msvc2017_64时使用的是VS2017对应的MSVC 19.16工具集。到了VS2019环境里VS2019的C运行库支持VS2017的二进制文件因此链接、运行都不会出问题。你自己编译时用的是v142工具集依赖的QT预编译库来自v141但Windows系统里同时存在对应的运行时DLL如msvcp140.dll、vcruntime140.dll两套工具集版本在系统层面达成了共存。这个机制的关键点在于v141和v142之间的二进制兼容性是有官方保证的。一旦换成VS2022的v143这套保证就失效了所以网上才有一堆人在VS2022下用QT 5.14.2踩到链接错误的坑。搞明白这个机制遇到诸如“LNK2038 运行时库不匹配”这类报错你自己就能推断出问题方向要么是工程里某个第三方库是静态编译且CRT版本不对要么是某个库用的是老版本的v140工具集和当前工程冲突。6.2 环境变量与路径优先级避坑在做完上述环境安装后建议顺手设置全局环境变量以后跑命令行工具、写脚本、让其他第三方工具识别QT都能省心很多。右键“此电脑” - “属性” - “高级系统设置” - “环境变量”。在“系统变量”中做以下配置变量名变量值作用QTDIRD:\Qt\Qt5.14.2\5.14.2\msvc2017_64告诉其他工具QT的安装根目录PATH追加%QTDIR%\bin让系统能找到QT运行库dll和qmake工具修改完环境变量后记得重启终端窗口或IDE否则环境变量不会生效。这里有一个很多人都会踩的坑只改“用户变量”里的PATH然后以管理员身份运行CMD或VS发现QT命令还是识别不了。原因很简单用户变量继承到系统级的进程时权限和加载顺序有差异建议直接改“系统变量”并且重启VS/CMD再试。环境变量配置完毕后在任意终端输入qmake --version如果能显示QMake version 3.1和Using Qt version 5.14.2说明QT命令行工具链已经完全就绪。7. 常见问题与实战排查记录7.1 问题排查速查表我把这几年在QT 5.14.2 VS2019安装配置中遇到过的高频问题整理成一张速查表供大家直接对照症状可能原因解决方法Qt Creator的Kits页面里MSVC编译器是灰色VS2019未安装“使用C的桌面开发”负载打开VS2019 Installer勾选该负载并修改新建项目时“Kit Selection”列表为空Qt Version未添加或qmake路径错误在Tools - Options - Kits中重新添加Qt Version编译报错“cl.exe is not able to compile a simple test program”VS2019的编译器环境变量未生效从开始菜单打开“x64 Native Tools Command Prompt for VS 2019”再尝试运行exe提示缺少Qt5Widgets.dll或Qt5Core.dll程序找不到QT运行库路径把%QTDIR%\bin加入系统PATH或使用windeployqt打包链接报错“LNK1112: module machine type x64 conflicts with target machine type x86”工程平台与QT库位数不一致在VS配置管理器切换x64编译报错“Cannot find -lQt5Core”qmake没有正确指向msvc2017_64检查.pro文件中的QT配置和Qt Version路径qt platform plugin“windows”加载失败Windows平台插件dll缺失确认qt安装目录下的plugins\platforms\qwindows.dll存在且没有混用MinGW库中文注释乱码或字符串乱码源文件编码和编译器默认代码页不一致统一使用UTF-8文件编码VS中可用“文件”-“高级保存选项”设置程序运行时崩溃提示“QWidget: Cannot create a QWidget without QApplication”main函数里QApplication对象比窗口对象后创建或提前销毁检查main函数流程确保QApplication先构造、最后析构7.2 容易忽视的构建目录和shadow buildQt Creator默认开启shadow build也就是把编译生成的中间文件放在一个“build-项目名-套件名-配置名”的独立目录里不污染源码目录。这个设计很好但也会带来一个问题当你修改了某些资源文件、重新构建却还是跑旧版本的时候很可能是构建缓存没有彻底清理。我的习惯是遇到“明明改了代码却没生效”的诡异问题先做Clean清理再做Rebuild重新构建不要只点“构建”按钮。在VS2019里也一样在“生成”菜单下选择“重新生成解决方案”。这两个动作能清掉八成以上的诡异问题。另外如果同一台机器上装了多个版本的QT千万别把编译缓存目录混在一起。比如你之前用QT 5.12建过项目后来换成QT 5.14.2有时候构建目录里的.qmake.stash文件会残留旧版本配置这时候直接删掉整个build目录重新构建就是最快的解法。7.3 离线环境下的发布与部署开发环境配好了还得考虑程序给别人的电脑跑的问题。QT程序不是简单的单个exe就能发出去的它需要一堆DLL和插件文件。我见过不少新手直接把exe拷给同事结果对方机器上一堆“缺少DLL”报错还以为是环境出了问题。把编译好的exe单独放到一个干净目录然后打开“x64 Native Tools Command Prompt for VS 2019”在里面执行cd /d D:\MyApp\release windeployqt MyApp.exewindeployqt会自动分析exe依赖的QT模块把对应的运行库、plugins、翻译文件等复制到当前目录。执行结束后把整个目录打压缩包发给别人基本就可以直接运行了。这一步也是发布部署最常见的标准做法和VS2019环境配合得非常好。8. 一些我自己保留的安装细节最后分享几个我在反复安装这套环境过程中总结出来的实操经验算是给本文画上一个并不正式的句号。首先是安装顺序问题。我试过先装QT再装VS2019也试过先装VS2019再装QT。两种顺序都能装成功但先装VS2019再装QT的话Qt Creator第一次启动自动检测MSVC编译器的成功率更高因为系统的MSVC相关注册表信息此时已经准备好。如果反过来Qt Creator可能需要重启或者手动刷新Kits才能识别到编译器。其次是从旧版本升级的坑。如果电脑里原来装了QT 5.12或5.13再装5.14.2是共存的但一定要保证工程里用的qmake是从新版本目录出发的。Qt Creator里如果同时存在多个Kit建议把旧的Kit禁用或删除不然稍不留神就用错了编译器报出的错误会让你怀疑人生。还有一个小习惯配置好环境后立刻建一个“环境验证工程”并单独保存。以后不管是换了新电脑还是给同事配环境先打开这个工程编译运行一遍五分钟就能确认环境是否正常省去了到业务代码里排查的时间。这比临时新建一个空白工程再写测试代码高效太多了。QT 5.14.2 VS2019这套组合现在看起来有些年头了但它在Windows桌面端的开发效率、稳定性、生态成熟度方面仍然很有竞争力。配置过程稍微注意一下版本匹配和组件勾选后面开发起来会顺畅很多。我自己在这个环境上跑过不少项目从简单的工具软件到偏复杂的业务系统整体体验都比较稳。如果你按照文章里的步骤装到一半卡住了多半是某一小步漏了回过去检查一下Kits配置和组件勾选基本都能解决。
返回列表