从 0 到跑通的 Qt + OpenGL + VS 项目的完整流程

🧩 全流程目标:

在 Visual Studio 中成功打开、编译并运行一个 Qt + OpenGL 项目(.vcxproj 格式)


✅ 第 1 步:安装必要环境

工具说明
Visual Studio 2017 / 2019 / 2022必须勾选 “使用 C++ 的桌面开发” 和 “MSVC 工具集”
Qt(对应 MSVC 版本)如 Qt 5.12.0 + MSVC2017_64
CMake(如果项目基于 CMake)可选,很多 .vcxproj 项目不需要
GLEW / GLFW / OpenGL可通过 vcpkg 或手动集成

✅ 推荐你安装:Qt 5.12.0 MSVC2017_64
Qt 安装路径一般为:E:\Qt\Qt5.12.0\5.12.0\msvc2017_64\


✅ 第 2 步:准备你的 .vcxproj 项目

你应该已经有这些文件之一:

  • SpongeBob.vcxproj

  • .h, .cpp, .ui

  • 项目文件夹结构:

SpongeBob\
├── SpongeBob.vcxproj
├── myglwidget.cpp / .h
├── main.cpp
├── *.ui
├── shaders / images / textures(资源)

✅ 第 3 步:在 VS 中配置 Qt + OpenGL 环境

🔧 配置 Qt 的包含路径和库路径

✅ 包含目录(C++头文件)
E:\Qt\Qt5.12.0\5.12.0\msvc2017_64\include
E:\Qt\Qt5.12.0\5.12.0\msvc2017_64\include\QtWidgets
E:\Qt\Qt5.12.0\5.12.0\msvc2017_64\include\QtGui
E:\Qt\Qt5.12.0\5.12.0\msvc2017_64\include\QtCore
E:\Qt\Qt5.12.0\5.12.0\msvc2017_64\include\QtOpenGL
✅ 库目录(.lib文件)
E:\Qt\Qt5.12.0\5.12.0\msvc2017_64\lib

✅ 第 4 步:设置链接器依赖项

🧱 Debug 模式下添加这些 .lib

Qt5Cored.lib
Qt5Guid.lib
Qt5Widgetsd.lib
Qt5OpenGLd.lib
opengl32.lib
glu32.lib
glew32s.lib   (或 glew32.lib)
glfw3_mt.lib  (或 glfw3dll.lib)

🧱 平台插件需要:

确保你的运行目录有:

platforms/qwindowsd.dll

✅ 第 5 步:设置运行目录

在 VS 中设置:

配置属性 → 调试 → 工作目录

设置为:

$(OutDir)

或你的资源路径目录。


✅ 第 6 步:添加 Qt 的 MOC 和 UIC 支持(如果使用 .ui 或 Q_OBJECT)

如果你用了 Qt 的信号槽、Q_OBJECT.ui 文件,需要让 VS 支持 Qt 的编译工具:

方法一:使用 Qt VS Tools 插件(官方)

安装后右键项目 → Qt Project Settings:

  • 配置 Qt 安装路径

  • 它会自动生成 MOC/UIC/资源文件


✅ 第 7 步:编译运行!

Debug 模式下运行:

  • 会生成 SpongeBob.exex64\Debug\

  • 确保该目录下有 Qt 所需 DLL 和平台插件


✅ 第 8 步:部署运行环境(拷贝 DLL)

可使用 windeployqt 自动打包运行依赖:

E:\Qt\Qt5.12.0\5.12.0\msvc2017_64\bin\windeployqt.exe E:\SpongeBob\x64\Debug\SpongeBob.exe

✅ 参考文件结构(运行时):

x64\Debug\
├── SpongeBob.exe
├── Qt5Cored.dll
├── Qt5Guid.dll
├── Qt5Widgetsd.dll
├── Qt5OpenGLd.dll
├── glew32.dll(如果用动态库)
├── glfw3.dll(如果用动态库)
└── platforms\└── qwindowsd.dll

🎁 Bonus:自动部署 .bat 文件(可选)

@echo off
set QT_DIR=E:\Qt\Qt5.12.0\5.12.0\msvc2017_64REM 配置 VS 环境
call "D:\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"REM 运行 windeployqt
%QT_DIR%\bin\windeployqt.exe E:\SpongeBob\x64\Debug\SpongeBob.exepause

🧠 小结:跑通 .vcxproj 的关键点

项目要点
编译包含目录 + 链接 .lib
运行拷贝 Qt DLL + GLEW/GLFW
GUIplatforms/qwindows[d].dll 必须有
调试启用符号(.pdb),避免混用 Debug/Release
信号槽使用 Qt VS Tools 或手动 MOC

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

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

相关文章

鸿蒙开发03样式相关介绍(二)

文章目录 一、样式复用1.1 Styles修饰符1.2 Extend修饰符 二、多态样式 一、样式复用 在页面开发过程中,会出出现大量重复的样式设置代码,可以使用Styles和Extend修饰符将帮助我们进行样式复用。 1.1 Styles修饰符 Styles装饰器可以将多条样式设置提炼…

装饰器模式与模板方法模式实现MyBatis-Plus QueryWrapper 扩展

pom <dependency><groupId>com.github.yulichang</groupId><artifactId>mybatis-plus-join-boot-starter</artifactId> <!-- MyBatis 联表查询 --> </dependency>MPJLambdaWrapperX /*** 拓展 MyBatis Plus Join QueryWrapper 类&…

05-031-自考数据结构(20331)- 哈希表 - 例题分析

哈希表考题主要涵盖四大类型:1)函数设计类(如除留余数法计算地址,需掌握质数p的选择技巧);2)冲突处理类(线性探测法要解决堆积现象,链地址法需绘制链表结构);3)性能分析类(重点计算ASL,理解装填因子α的影响规律);4)综合应用类(如设计ISBN查询系统,需结合实际问…

rustdesk 自建服务器 key不匹配

请确保id_ed25519文件的权限为&#xff1a; -rw------- 1 root root 88 Apr 31 10:02 id_ed25519在rustdesk安装目录执行命令&#xff1a; chmod 700 id_ed25519

Dify 深度集成 MCP实现灾害应急响应

一、架构设计 1.1 分层架构 #mermaid-svg-5dVNjmixTX17cCfg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-5dVNjmixTX17cCfg .error-icon{fill:#552222;}#mermaid-svg-5dVNjmixTX17cCfg .error-text{fill:#552222…

AI与.NET技术实操系列(三):在 .NET 中使用大语言模型(LLMs)

1. 引言 在技术迅猛发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为人工智能领域的核心驱动力之一。从智能对话系统到自动化内容生成&#xff0c;LLMs的应用正在深刻改变我们的工作与生活方式。对于.NET开发者而言&#xff0c;掌…

一个极简的词法分析器实现

文章目录 推荐&#xff1a;Tiny Lexer - 一个极简的C语言词法分析器特点核心代码实现学习价值扩展建议 用Java实现一个简单的词法分析器完整实现代码代码解析示例输出扩展建议 用Go实现极简词法分析器完整实现代码代码解析示例输出扩展建议 最近两天搞一个DSL&#xff0c;不得不…

强制用户裸奔,微软封锁唯一后门操作

周末刚结束&#xff0c;那个常年将「用户为中心」挂嘴边的微软又双叒叕开始作妖&#xff01; 不错&#xff0c;大伙儿今后可能再没法通过「OOBE\BYPASSNRO」命令绕过微软强制联网要求了。 熟悉 Windows 11 操作系统的都知道&#xff0c;除硬件上诸多限制外&#xff1b; 软件层…

大模型备案:拦截关键词列表与敏感词库深度解析

随着《生成式人工智能服务管理暂行办法》正式实施&#xff0c;大模型上线备案成为企业合规运营的核心环节。其中&#xff0c;敏感词库建设与拦截关键词列表管理直接关系内容安全红线&#xff0c;今天我们就来详细解析一下大模型备案的这一部分&#xff0c;希望对想要做备案的朋…

快速上手Linux系统输入输出

一、管理系统中的输入输出 1.什么是重定向&#xff1f; 将原本要输出到屏幕上的内容&#xff0c;重新输入到其他设备中或文件中 重定向类型包括 输入重定向输出重定向 2.输入重定向 指定设备&#xff08;通常是文件或命令的执行结果&#xff09;来代替键盘作为新的输入设…

文小言全新升级!多模型协作与智能语音功能带来更流畅的AI体验

文小言全新升级&#xff01;多模型协作与智能语音功能带来更流畅的AI体验 在3月31日的百度AI DAY上&#xff0c;文小言正式宣布了一系列令人兴奋的品牌焕新与功能升级。此次更新不仅带来了全新的品牌视觉形象&#xff0c;更让文小言在智能助手的技术和用户体验方面迈上了一个新…

C++基础算法(插入排序)

1.插入排序 插入排序&#xff08;Insertion Sort&#xff09;介绍&#xff1a; 插入排序是一种简单直观的排序算法&#xff0c;它的工作原理类似于我们整理扑克牌的方式。 1.基本思想 插入排序的基本思想是&#xff1a; 1.将数组分为已排序和未排序两部分 2.每次从未排序部分…

k近邻算法K-Nearest Neighbors(KNN)

算法核心 KNN算法的核心思想是“近朱者赤&#xff0c;近墨者黑”。对于一个待分类或预测的样本点&#xff0c;它会查找训练集中与其距离最近的K个样本点&#xff08;即“最近邻”&#xff09;。然后根据这K个最近邻的标签信息来对当前样本进行分类或回归。 在分类任务中&#…

【Feign】⭐️使用 openFeign 时传递 MultipartFile 类型的参数参考

&#x1f4a5;&#x1f4a5;✈️✈️欢迎阅读本文章❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;本篇文章阅读大约耗时三分钟。 ⛳️motto&#xff1a;不积跬步、无以千里 &#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff1a;&#x1f381;&#x1f381;&a…

zk基础—1.一致性原理和算法二

大纲 1.分布式系统特点 2.分布式系统的理论 3.两阶段提交Two-Phase Commit(2PC) 4.三阶段提交Three-Phase Commit(3PC) 5.Paxos岛的故事来对应ZooKeeper 6.Paxos算法推导过程 7.Paxos协议的核心思想 8.ZAB算法简述 6.Paxos算法推导过程 (1)Paxos的概念 (2)问题描述 …

216. 组合总和 III 回溯

目录 问题描述 解决思路 关键点 代码实现 代码解析 1. 初始化结果和路径 2. 深度优先搜索&#xff08;DFS&#xff09; 3. 遍历候选数字 4. 递归与回溯 示例分析 复杂度与优化 回溯算法三部曲 1. 路径选择&#xff1a;记录当前路径 2. 递归探索&#xff1a;进入下…

从AI大模型到MCP中台:构建下一代智能服务的核心架构

从AI大模型到MCP中台&#xff1a;构建下一代智能服务的核心架构 引言&#xff1a;AI大模型带来的服务重构革命 在ChatGPT掀起全球AI热潮的今天&#xff0c;大模型展现出的惊人能力正在重塑整个软件服务架构。但鲜为人知的是&#xff0c;真正决定AI服务成败的不仅是模型本身&a…

美团小程序 mtgsig1.2 拼好饭案例 分析 mtgsig

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向分析 美团网页、小程序、app全是指…

【大模型基础_毛玉仁】5.5 模型编辑应用

目录 5.5 模型编辑应用5.5.1 精准模型更新5.5.2 保护被遗忘权5.5.3 提升模型安全 5.5 模型编辑应用 大语言模型面临更新成本高、隐私保护难、安全风险大等问题。模型编辑技术&#xff1a; 通过细粒度修改预训练模型&#xff0c;避免从头训练&#xff0c;降低更新成本&#xff…

揭秘:父子组件之间的传递

基础知识 组件与组件之间有三大方面的知识点&#xff1a; 子组件通过props defineProps&#xff08;{}&#xff09;接收父组件传递到参数和方法&#xff1b;子组件可以通过定义 emit 事件&#xff0c;向父组件发送事件&#xff1b;父组件调用子组件通过defineExpose 导出的方法…