【AI时代速通QT】第八节:Visual Studio与Qt-从项目迁移到多版本管理
目录
前言
一、世界之间的桥梁:将VS项目导出为Qt Creator项目
1.1 为何需要导出?
1.2 一步步导出`.pro`文件
1.3 解密`.pro`与`.pri`:它们是什么,做了什么?
二、为项目“添砖加瓦”:动态添加Qt模块
三、多版本“交响曲”:管理并切换Qt版本
3.1 第一步:在VS中注册你所有的Qt版本
3.2 第二步:为你的解决方案(Solution)切换Qt版本
四、最重要的避坑指南:32位 vs 64位与第三方库的“生死对决”
五、总结
🎬 攻城狮7号:个人主页
🔥 个人专栏:C++QT跨平台界面编程
⛺️ 君子慎独!
🌈 大家好,欢迎来访我的博客!
⛳️ 此篇文章主要介绍 Visual Studio与Qt-从项目迁移到多版本管理
📚 本期文章收录在《C++QT跨平台界面编程》,大家有兴趣可以自行查看!
⛺️ 欢迎各位 ✔️ 点赞 👍 收藏 ⭐留言 📝!
前言
对于习惯了Visual Studio强大调试功能的C++开发者来说,使用Qt框架时,如何将两者的优势结合起来,是一个永恒的话题。Qt官方的`Qt VS Tools`插件为我们架起了一座桥梁,但在这座桥上,我们常常会遇到一些“拦路虎”:如何将VS项目交给只用Qt Creator的同事?如何在多个Qt版本间自由切换?如何添加新的Qt模块?以及那个最令人头疼的32位与64位库冲突问题。
本文将继续以上一节的示例项目(`vsqt`)为基础,深入浅出地讲解如何优雅地解决以上问题,让你在VS中驾驭Qt开发时游刃有余。
一、世界之间的桥梁:将VS项目导出为Qt Creator项目
1.1 为何需要导出?
在团队协作中,我们经常会遇到这样的场景:你习惯使用Visual Studio进行开发和调试,而你的同事则更偏爱跨平台的Qt Creator。此时,如何顺畅地共享和协作项目就成了一个问题。`Qt VS Tools`提供的项目导出功能,正是为了解决这一痛点。
1.2 一步步导出`.pro`文件
假设我们已经在VS中创建或打开了一个Qt项目,比如我们的`vsqt`示例。要将其转换为Qt Creator可以识别的`.pro`工程文件,操作非常简单:
(1)在VS的顶部菜单栏中,找到并点击 `Qt VS Tools`。
(2)下拉菜单中选择 'Convert Project to Qt VS Tools Project' ,并进行确认操作。
(2)转换后,在下拉菜单中会新增一些选项,如下选择 `Create .pro File`。
工具会弹出一个对话框,询问你是否要同时创建一个`.pri`文件。在这里,我们强烈建议勾选并创建。点击确认后,在你的项目根目录下(`vsqt/`),就会生成`vsqt.pro`和`vsqt.pri`两个新文件。
1.3 解密`.pro`与`.pri`:它们是什么,做了什么?
(1)`.pro`文件:这是Qt Creator的主项目文件。它的内容通常非常简洁。打开`vsqt.pro`,你会看到类似这样的内容:
# ----------------------------------------------------# This file is generated by the Qt Visual Studio Tools.# ------------------------------------------------------TEMPLATE = vcappinclude(vsqt.pri)
它只做了一件事:通过`include(vsqt.pri)`指令,将`.pri`文件的内容包含进来。
(2)`.pri`文件:这是一个“项目包含文件”(Project Include File)。`Qt VS Tools`非常聪明地将项目中所有与平台无关的共享信息都提取到了这里。打开`vsqt.pri`,内容会是这样:
# ----------------------------------------------------# This file is generated by the Qt Visual Studio Tools.# ------------------------------------------------------HEADERS += ./vsqt.hSOURCES += ./main.cpp \./vsqt.cppFORMS += ./vsqt.uiRESOURCES += vsqt.qrc
可以看到,所有的头文件(`HEADERS`)、源文件(`SOURCES`)、UI设计文件(`FORMS`)和资源文件(`RESOURCES`)都被清晰地列在了这里。
这样做的好处是什么?
这种分离的策略极大地增强了项目的灵活性。`.pri`文件定义了“项目由哪些文件构成”,而`.pro`文件则可以根据不同平台(如Windows, Linux, macOS)或不同编译器(如MSVC, MinGW)添加各自特定的配置。你可以创建多个`.pro`文件(如`vsqt_linux.pro`, `vsqt_win.pro`),它们都包含同一个`.pri`文件,从而轻松实现跨平台编译。
现在,你的同事只需用Qt Creator打开那个新生成的`vsqt.pro`文件,配置好他自己的编译套件(Kit),就可以无缝地开始工作了。
二、为项目“添砖加瓦”:动态添加Qt模块
项目开发过程中,我们常常会遇到需要新功能的情况。比如,你最初的项目只用了`Core`和`GUI`模块,现在需要播放音频,就必须引入`Multimedia`模块。在VS中,这个操作同样非常便捷:
(1)在顶部菜单栏选择 `Qt VS Tools` -> `Qt Project Settings`。
(2)弹出的窗口中,切换到 `Qt Modules` 选项卡。
(3)这里列出了所有可用的Qt模块。找到并勾选你需要的模块,比如`Multimedia`或`OpenGL`。
(4)点击OK。
插件会自动在后台为你处理好所有繁琐的配置,包括修改项目的包含目录、库目录和链接器输入。这比手动去项目属性(`.vcxproj`)里一点点添加要安全和高效得多。
三、多版本“交响曲”:管理并切换Qt版本
对于一个经验丰富的开发者来说,电脑上同时存在多个Qt版本(如为老项目准备的Qt 5.9,为主力项目准备的Qt 5.15,为探索新特性准备的Qt 6.2)是非常正常的。`Qt VS Tools`为此提供了强大的多版本管理和切换能力。
3.1 第一步:在VS中注册你所有的Qt版本
首先,你需要告诉VS你的Qt都安装在了哪里。
(1)选择 `Qt VS Tools` -> `Qt Options`。
(2)在弹出的窗口中,点击 `Add`。
(3)在“Path”一栏,选择你某个Qt版本的根目录,特别注意,要选择到具体的编译器版本,例如 `C:\Qt\5.9.0\msvc2015_64`。这个目录下必须包含`bin`, `lib`, `include`等文件夹。
(4)VS会自动识别版本并填充“Version”字段。
(5)重复此操作,将你所有的Qt版本都添加进来。你还可以选择一个作为默认版本。
3.2 第二步:为你的解决方案(Solution)切换Qt版本
当你从同事那里拿到一个项目,或者需要用新版Qt重新编译一个老项目时,就需要切换整个解决方案使用的Qt版本。
(1)在解决方案资源管理器(Solution Explorer)中,右键点击最顶层的解决方案(Solution 'vsqt'),注意是解决方案,不是项目。
(2)在右键菜单中,选择 `Change Solution's Qt Version`。
(3)在弹出的窗口中,选择一个你在上一步中已经注册好的Qt版本。
(4)点击OK。
插件会自动更新解决方案下所有Qt项目的配置,使其指向新版本的头文件和库。
四、最重要的避坑指南:32位 vs 64位与第三方库的“生死对决”
这是无数新手(甚至一些老手)都会栽跟头的地方,也是本文最重要的部分。当你切换Qt版本,特别是涉及到从32位(Win32)切换到64位(x64)时,请务必记住一条黄金法则:
你的项目配置、你选择的Qt版本、以及你链接的所有第三方库,它们的“位数”(架构)必须保持绝对一致!
让我们来想象一个灾难性的场景:
(1)你将解决方案的Qt版本切换到了`msvc2019_64`(64位)。
(2)你在VS的编译目标中,也选择了`x64`。
(3)但是,你的项目中链接了一个你自己编译的、或者是从网上下载的第三方日志库(比如log4cxx),而这个库的`.lib`和`.dll`文件是32位的。
当你点击编译时,链接器会立刻抛出成吨的错误,比如`LNK1112: module machine type 'x86' conflicts with target machine type 'x64'`或者各种`LNK2019: unresolved external symbol`。
为什么会这样?
因为32位和64位的程序在内存寻址方式、函数调用约定等方面是完全不兼容的。你不能在一个64位的程序中,去调用一个32位库里的函数。
如何解决?
(1)保持一致:在切换到64位编译前,请确保你拥有的所有第三方库,也都有对应的64位版本。
(2)自行编译:如果找不到预编译的64位版本,最好的办法就是获取第三方库的源码,用你的64位编译器(如VS 2019的x64 Native Tools Command Prompt)亲自编译出一套64位的`.lib`和`.dll`。
在过去,这个问题不突出,因为大家基本都在32位环境下工作。但随着现代应用程序对内存的需求越来越大(32位程序最多只能使用约2GB内存),64位开发已成为主流。因此,建立起“架构一致性”这根弦,能为你节省大量的调试时间。
五、总结
掌握`Qt VS Tools`的使用,是提升在Visual Studio中进行Qt开发幸福感的关键。通过本文,我们学习了:
(1)如何通过生成`.pro`和`.pri`文件,在VS和Qt Creator之间搭建协作桥梁。
(2)如何通过`Qt Project Settings`,方便地为项目增删Qt模块。
(3)如何通过`Qt Options`和`Change Solution's Qt Version`,在多个Qt版本间灵活切换。
(4)以及最重要的,时刻警惕32位与64位的架构匹配问题,避免链接错误的深坑。
工具是开发的利器,花一些时间去熟悉它、理解它,它必将在你的开发旅程中给予丰厚的回报。
看到这里了还不给博主点一个:
⛳️ 点赞
☀️收藏
⭐️ 关注
!
💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖
再次感谢大家的支持!
你们的点赞就是博主更新最大的动力!