【AI时代速通QT】第七节:Visual Studio+Qt 开发指南 - 详解

news/2025/10/3 12:46:12/文章来源:https://www.cnblogs.com/slgkaifa/p/19124514

【AI时代速通QT】第七节:Visual Studio+Qt 开发指南 - 详解

目录

前言

一、Part 1: 创建你的第一个 VS Qt 项目

二、Part 2: 核心解密:VS项目属性深度配置

2.1 通用设置 (General)

2.2 调试设置 (Debugging)

2.3 调试利器:开启控制台窗口

2.4 添加第三方库

三、Part 3: 管理Qt版本和模块

结语


攻城狮7号:个人主页

个人专栏:C++QT跨平台界面编程

⛺️ 君子慎独!

大家好,欢迎来访我的博客!
⛳️ 此篇文章主要介绍 Visual Studio+Qt 开发指南
本期文章收录在《C++QT跨平台界面编程》,大家有兴趣可以自行查看!
⛺️ 欢迎各位 ✔️ 点赞 收藏 ⭐留言 !

前言

对于许多Windows平台的C++开发者来说,Visual Studio无疑是最强大、最熟悉的IDE。而Qt作为一个成熟的跨平台C++图形界面库,其强大的功能和优雅的设计也备受青睐。当这两者结合,我们便能借助VS强大的调试工具和代码编辑体验来高效地制作Qt应用程序。

然而,从Qt Creator转向Visual Studio的开发者,或者初次尝试VS+Qt组合的新手,常常会因为项目配置疑问而“踩坑”,例如程序无法启动、找不到DLL、资源材料加载失败等。这些障碍大多源于对VS项目配置系统的不熟悉。

要弄清楚“为什么要这么做”,让你彻底告别配置的烦恼,专注于代码本身。就是本篇文章将以一个容易项目为例,手把手地带你走过从创建工程到完成所有关键配置的全过程。我们的目标不仅仅是“怎么做”,更

准备工作:在开始之前,请确保你已经在Visual Studio中成功安装了Qt VS Tools扩展插件。这是连接VS和Qt的桥梁,一切工作都将围绕它展开。(还不知道怎么安装就参考本专栏的第一节末尾部分,或者自行搜索或问AI)

一、Part 1: 创建你的第一个 VS Qt 项目

让我们从“无”到“有”,创建一个基础的Qt窗口应用程序。下面以vs2015为例,其他版本区别不大。

(1)新建项目:打开Visual Studio,选择 `资料` -> `新建` -> `项目`。在弹出的窗口中,找到 `Visual C++` -> `Qt` 分类,并选择 `Qt GUI Application`。

(2)设置路径:为你的项目命名(例如:`vsqt`),并选择一个合适的存放位置。这里有一个小技巧,建议取消勾选“为解决方案创建目录”。这样做可以让你的 `.sln` 和 `.vcxproj` 文档与项目文件夹在同一层级,使目录结构更扁平、更清晰。

(3)Qt向导:点击“确定”后,会进入Qt VS Tools的配置向导。

* 第一个界面直接点击“下一步”。

* 第二个界面让你选择项目类型和得包含的Qt模块。对于初学者,保持默认的 `Qt Widgets Application` 即可,`QtCore` 和 `QtGui` 模块也会被自动勾选。

* 第三个界面是关键。在这里,我们允许设置主窗口的基类。默认是 `QMainWindow`,但对于简单的对话框或窗口,我们许可选择更轻量的 `QWidget`。在“类名”处输入一个符合大驼峰命名法(PascalCase)的名称,如 `vsqt`。同时,建议勾选下方的“所有文件名小写”,这有助于在不同操作系统(特别是大小写敏感的Linux)之间移植代码时避免不必要的问题。

(4)完成创建:点击“完成”,VS会自动生成所有必要的记录。

此时,在你的解决方案资源管理器中,可以看到如下的项目结构:

* `vsqt.h` / `vsqt.cpp`:主窗口类的头文件和源文件。

* `main.cpp`:含有 `main` 函数的代码入口文件。

* `vsqt.ui`:使用Qt Designer设计的UI界面文件。

* `vsqt.qrc`:Qt资源文件,用于管理图片、翻译记录等。

* Generated Files:通过这是一个非常重要的虚拟文件夹。Qt的 `moc`(元对象编译器)、`uic`(用户界面编译器)和 `rcc`(资源编译器)在编译期间生成的中间文件都会在这里显示。这使得在VS中能够直观地看到所有参与编译的文件,与Qt Creator将它们隐藏起来的做法不同。

现在,你允许直接按 `F5` 运行应用,一个空白的窗口应该会顺利弹出。第一步已经成功迈出!

二、Part 2: 核心解密:VS项目属性深度配置

能运行只是开始,一个健壮的项目配置才是高效开发的保障。右键点击解决方案资源管理器中的项目名称(`vsqt`),选择“属性”,让我们来深入探索其中最重要的几个设置。

2.1 通用设置 (General)

路径: `配置属性 -> 常规`

这是我们首先要关注的地方。

(1)输出目录 (Output Directory):

* 作用:决定生成的 `.exe` 文档最终存放在哪里。

* 建议:默认值通常是在项目目录下的 `$(Platform)\$(Configuration)\`,这会导致输出档案散落在各处。一个更好的实践是将其统一输出到一个公共的 `bin` 目录,例如 `$(SolutionDir)bin\$(Platform)\$(Configuration)\`。这里的 `$(SolutionDir)` 是一个宏,代表解决方案文件 `.sln` 所在的目录。这样设置后,无论是32位/64位还是Debug/Release版本,所有的可执行文件都会被清晰地组织在解决方案目录下的 `bin` 文件夹中。

* 好处:集中管理输出,便于后期打包发布,也为下一步设置工作目录打下基础。

(2)平台工具集 (Platform Toolset):

* 作用:指定用于编译项目的编译器和库。

* 注意:该值必须与你安装的Qt版本所匹配。例如,假如你下载的Qt是为 `msvc2015_64` 编译的,那么这里就应该选择 `Visual Studio 2015 (v140)`。版本不匹配是导致链接错误的常见原因之一。

2.2 调试设置 (Debugging)

路径: `设置属性 -> 调试`

这是整个配备过程中最关键、也最容易被忽略的一步。

(1)工作目录 (Working Directory):

* 作用:定义了程序启动时所在的当前目录(Current Working Directory)。程序在查找动态链接库(DLLs)、加载相对路径的资源文件(如图片、配置文件)时,会最初从这个目录开始寻找。

* 致命错误:VS的默认值是 `$(ProjectDir)`,也就是 `.vcxproj` 文件所在的目录。而我们的 `.exe` 文件根据上一步的设置,已经输出到了 `bin` 目录。这就导致了,当你按F5启动调试时,软件在任务目录里启动,但它依赖的Qt DLLs(如 `Qt5Widgetsd.dll`)和它自己都在远处的 `bin` 目录里,自然会因为找不到依赖而启动失败!

* 正确设置:必须将工作目录设置为与“输出目录”一致!直接将 `$(SolutionDir)bin\$(Platform)\$(Configuration)\` 复制过来即可。这样就保证了软件在哪里,就从哪里启动,所有依赖和资源都能被正确找到。

2.3 调试利器:开启控制台窗口

路径: `配置属性 -> 链接器 -> 系统`

Qt脚本默认是窗口程序,你看不到 `printf` 或者 `qDebug()` 的输出。但在开发阶段,这些调试信息至关重要。

(1)子系统 (SubSystem):

* 作用:告诉操作系统你的代码是哪种类型。`窗口 (/SUBSYSTEM:WINDOWS)` 类型没有控制台,而 `控制台 (/SUBSYSTEM:CONSOLE)` 类型则会带一个黑色的命令行窗口。

* 工作原理:Qt在背后为我们做了处理。当你选择 `窗口` 子系统时,Qt的库会自动生成一个 `WinMain` 函数,并在这个函数内部调用我们写的 `main` 函数。就是你可能会疑惑,控制台程序的入口是 `main`,窗口应用的入口是 `WinMain`,而我们的Qt代码里只有一个 `main` 函数,它是怎么做到兼容的?其实

* 开发建议:在 Debug 配备下,强烈建议将此项设置为`控制台 (/SUBSYSTEM:CONSOLE)`。这样,当你运行程序时,会自动弹出一个控制台窗口。所有 `qDebug()` 的输出,包括信号槽连接失败的警告,都会清晰地打印出来,是调试的绝佳帮手。

* 发布注意:在最终的 Release 设置中,记得将它改回`窗口 (/SUBSYSTEM:WINDOWS)`,否则你的用户在运行软件时会看到一个多余的黑框。

2.4 添加第三方库

当你的项目需要引用OpenCV、FFmpeg等第三方库时,你需要告诉VS去哪里找它们的头文件和库文件。

(1)添加头文件路径:

* 路径:`配置属性 -> C/C++ -> 常规 -> 附加包含目录`

* 作用:在这里添加第三方库的 `include` 文件夹路径。这样,你在代码中 `#include <third_party_header.h>` 时,编译器才知道去哪里寻找这个文件。

(2)添加库记录路径:

* 路径:`部署属性 -> 链接器 -> 常规 -> 附加库目录`

* 作用:在这里添加第三方库的 `lib` 文件夹路径。这只是告诉链接器库文件可能在哪些文件夹里。

(3)指定要链接的库:

* 路径:`配置属性 -> 链接器 -> 输入 -> 附加依赖项`

* 作用:在这里明确填入要求链接的具体 `.lib` 文件名,例如 `opencv_world450d.lib`。注意,Debug版本和Release版本的库文件名通常不同(Debug版本常带'd'后缀),你需要为不同的设置分别设置。

对于Qt自身的模块,你不需手动进行这些管理,Qt VS Tools会自动帮你处理好。

三、Part 3: 管理Qt版本和模块

如果你的项目中途需要增加新的Qt模块(比如网络、数据库),或者想切换Qt版本,该怎么办?Qt VS Tools给出了便捷的图形化界面。

(1)点击VS菜单栏的 `扩展` -> `Qt VS Tools` -> `Qt Project Settings`。

(2)在弹出的窗口中,`Version`下拉框可以切换当前项目关联的Qt版本(前提是你已经配置了多个Qt版本)。

(3)下方的 `Qt Modules` 列表中,你可以随时勾选或取消项目需要的模块,比如 `QtNetwork`、`QtSql`。点击“OK”后,插件会自动更新项目的包含路径和链接库设置,相当方便。

结语

VS+Qt高效创建的基石。总结一下我们的黄金法则:就是正确的配置

(1)创建项目:使用Qt VS Tools向导,注意命名规范和文件大小写。

(2)统一输出:在计划属性中,将“输出目录”设置为一个集中的 `bin` 目录。

(3)同步工作目录:将“调试”中的“工作目录”设置得与“输出目录”完全一致。这是避免“找不到DLL”困难的关键。

(4)开启控制台:在Debug模式下,将链接器的子系统改为“控制台”,方便查看调试信息。

(5)善用插件:通过Qt VS Tools的图形界面来管理Qt模块和版本。

掌握了这些配置细节,你就可能把精力完全投入到Qt应用的功能开发中,充分享受Visual Studio带来的强大生产力。

看到这里了还不给博主点一个:
⛳️ 点赞☀️收藏 ⭐️ 关注

❤️
再次感谢大家的支持!
你们的点赞就是博主更新最大的动力!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/925901.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业网站代建设用微信公众平台做分类广告网站

系列文章目录 AI全栈工程师&#xff08;本文&#xff09; 文章目录 系列文章目录一、前言二、面试题1. 基础理论与数据处理2. 机器学习3. 深度学习4. 大模型与迁移学习5. 计算机视觉6. 自然语言处理&#xff08;NLP&#xff09;7. 多模态学习8. AI生成内容&#xff08;AIGC&am…

电视网站后台管理系统漏洞精准营销方式有哪些

数据工具 分列的其他运用&#xff1a;身份证号中“出生日期”切片&#xff1a;分列→固定宽度→下一步→切割出三列→下一步→不导入第一列→导入第二列且转换成日期→不导入第三列→完成 删除重复值&#xff1a;定位到要“数据”选项卡→删除重复项→取消全选再勾选要删除的…

临沂做网站推广的公司东莞网络营销全网推广

简介 网神防火墙是一款由中国知名网络安全公司启明星辰开发的防火墙产品。它提供了全面的网络安全防护功能,旨在保护企业网络免受各种网络威胁和攻击。 该产品存在用户账号信息泄露漏洞,通过构造特定数据包,获取防火墙管理员登录的账号密码。 漏洞复现 FOFA语法: body=&…

php实验报告企业网站开发做网站优化用什么软件

Golang 是一门号称从语言层面支持并发的编程语言&#xff0c;支持并发是 Golang 一个非常重要的特性。在上一篇文章《44 | 协程&#xff1a;更轻量级的线程》中我们介绍过&#xff0c;Golang 支持协程&#xff0c;协程可以类比 Java 中的线程&#xff0c;解决并发问题的难点就在…

2025粒度仪厂家 TOP 企业品牌推荐排行榜,粒度分析仪,喷雾,激光,纳米,在线,图像粒形,干湿两用粒度仪公司推荐

引言在颗粒表征技术愈发关键的当下,粒度仪已成为金属粉、非金属矿粉、医药、化工等多个领域不可或缺的检测设备。然而,市场上粒度仪品牌与产品层出不穷,质量与性能参差不齐,给企业和科研机构的选购带来了诸多困扰。…

详细介绍:【读书笔记】《C陷阱与缺陷》第4章:连接问题解析 | 避开多文件编译的坑

详细介绍:【读书笔记】《C陷阱与缺陷》第4章:连接问题解析 | 避开多文件编译的坑pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; fon…

Kafka 安全SASL 认证全栈实战从 JAAS 到 Kerberos、PLAIN、SCRAM、OAUTH 与委托令牌 - 教程

Kafka 安全SASL 认证全栈实战从 JAAS 到 Kerberos、PLAIN、SCRAM、OAUTH 与委托令牌 - 教程2025-10-03 12:31 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !importa…

glibc堆

堆的概述 在内存管理领域,glic通过brk和mmap两大系统调用,构建了一套高效的堆内存管理机制。层级化架构,包含分配区(Arena) 堆(Heap) 内存块(Chunk). 主Arena依赖brk系统调用实现内存分配,而子Arena通过mmap完…

幻影图片一键制作网站成武县建设局网站

1.控制同一语句的多次执行2.减少多次的数据转换3.杜绝不必要的子查询和连接表&#xff0c;子查询在执行计划一般解释成外连接&#xff0c;多余的连接表带来额外的开销。4.合并对同一表同一条件的多次UPDATE&#xff0c;比如 UPDATE EMPLOYEE SET FNAMEHAIWER WHERE EMP_ID VPA3…

完整教程:从 “T+1” 到 “秒级”:MySQL+Flink+Doris 构建实时数据分析全链路

完整教程:从 “T+1” 到 “秒级”:MySQL+Flink+Doris 构建实时数据分析全链路pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

平均数

题目大意 平均数 给定长度为 \(n\) 的非负整数序列 \(a_1,a_2,\cdots,a_n\),问有多少个区间 \([l,r](1\le l\le r\le n)\) 满足 \(a_l,a_{l+1},\cdots,a_{r}\) 的平均数为给定非负整数 \(k\)。 思路 发现直接维护平均…

质数表

每个量级取前 50 个。 1e2 - 1e6 数表1e2 1e3 1e4 1e5 1e6101 1009 10007 100003 1000003103 1013 10009 100019 1000033107 1019 10037 100043 1000037109 1021 10039 100049 1000039113 1031 10061 100057 100008112…

dw网站制作的一般流程全国商务网站大全

题干&#xff1a; Eddy是个ACMer,他不仅喜欢做ACM题,而且对于Ranklist中每个人的ac数量也有一定的研究,他在无聊时经常在纸上把Ranklist上每个人的ac题目的数量摘录下来&#xff0c;然后从中选择一部分人(或者全部)按照ac的数量分成两组进行比较&#xff0c;他想使第一组中的最…

企业建设网站需要服务器吗网站制作的

需要使用 JIRA 的查找功能。 把需要移动的 Issue 先全部找到&#xff0c;然后选择 Tools 下面的所有 Issues 批量操作页面 在随后的页面中&#xff0c;将会出现批量操作的页面。 在这里&#xff0c;可以对需要进行批量操作的问题&#xff0c;进行全部选择。 然后单击下一步继…

青岛seo网站建设公司建个网站的费用

面向对象编程特征&#xff1a;抽象化&#xff0c;讲究对象&#xff0c;集成&#xff0c;封装&#xff0c;多态。 类&#xff1a;一类事物&#xff0c;苹果&#xff0c;梨&#xff0c;香蕉都是水果&#xff0c;都是一类。 类的特征&#xff1a;构造函数&#xff0c;字段属性和方…

从刷抖音说起:你每天都在 “用” 服务器,却可能不认识它 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

小作业 11

给定 \(a,b>0\),求 \(\dfrac{a}{a+2b}+\dfrac{b}{a+b}\) 的最小值。\[\dfrac{a}{a+2b}+\dfrac{b}{a+b}=\dfrac{a^2+2ab+2b^2}{a^2+3ab+2b^2} \]\[=1-\dfrac{ab}{a^2+3ab+2b^2}=1-\dfrac{1}{\frac{a}{b}+\frac{2b}{…

US$948 WOYO UC009 Ultrasonic Cutter for Cutting Plastic

WOYO UC009 Hobby Tool for Cutting PlasticWOYO UC009 Description:1.Oscillation Frequency: 39.5KHz Max. Output Power: 30W2. Intricate and accurate cutting with a light touch3. This ideal handpiece offer…

深入解析:【RabbitMQ】原理解析

深入解析:【RabbitMQ】原理解析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&qu…

win7 iis添加网站深圳做营销网站公司简介

随着经济的不断发展和生活水平的日益提高&#xff0c;节能环保已经成为全社会的责任和共识&#xff0c;分布式光伏电站作为清洁能源走进了千家万户。然而&#xff0c;在分布式光伏电站运行期间&#xff0c;面临监管困难、系统繁多、火灾隐患和运维不当等困难&#xff0c;该如何…