【QT+VS】如何在现有VS项目中添加Qt界面?【全网最详细】

0. 前置步骤

参考如下链接文章中的 前3个步骤(1:下载Qt;2:安装Qt;3:安装Qt插件),完成环境的配置和安装。
深耕AI:如何联合Qt,VS,C++,来开发一个电脑版软件(简单有趣,详细)

本文的基础项目链接为:
c++工程+图像分割预测+mmdet+实例分割+最新工程+简洁易懂+新手学习资源

基础项目页面截图

1. 配置Qt插件

进人VS2019后,在扩展下面选择Qt VS Tools->Qt Options。
在这里插入图片描述

然后进行qt配置。选择Qt->Versions,下的安装目录下路径,即可。
在这里插入图片描述

2. 配置包含目录及链接器

VC++目录->包含目录 添加:

D:\software\QT\6.6.2\msvc2019_64\include

VC++目录->库目录下 添加:

D:\software\QT\6.6.2\msvc2019_64\lib

链接器->输入->附加依赖项 中添加下面项:

Qt6Widgetsd.lib
Qt6Widgets.lib
Qt6Guid.lib
Qt6Gui.lib
Qt6Cored.lib
Qt6Core.lib

在这里插入图片描述

3. 添加QT界面

a. 添加UI界面

鼠标右键项目,点击添加->新建项,Visual C+±>Qt->Qt MainWindow From File,点击添加。

在这里插入图片描述

此时,就可以看到 MainWindow001.ui 文件 已经添加到了我们的项目中。
然后和Qt Creator创建的ui文件一样,我们可以直接双击打开。
如果打开报错如下:

在这里插入图片描述

解决方案:
第1步:右击该 .ui 文件,选择“打开方式”;
在这里插入图片描述

第2步:点击右上角“添加”;
在这里插入图片描述

第3步:点击 “…”;
在这里插入图片描述

第4步:选择 Qt 安装目录下的 “designer.exe”,点击 “打开”;
我的 Qt 安装目录:D:\software\QT\6.6.2\msvc2019_64\bin
在这里插入图片描述

所以选择:
在这里插入图片描述

第5步:在 友好名称 列表中填写一个名字(不建议中文),我这里填写的是 “Qt Designer selected” ,然后点击确定。
在这里插入图片描述

第6步:最后选中自己刚才所起的名字 “Qt Designer selected” ,点击 “设为默认值” ,“确定”。
在这里插入图片描述

然后,就会看到:
在这里插入图片描述

接下来:
在里面设计我们的界面。 (比如我在这里加3个按钮pushButton和2个路径显示框lineEdit)
在这里插入图片描述

注意!!!
Visual Studio中,使用鼠标右键点击项目,然后选择“添加”->“新建项”,在弹出的模板列表中选择“Visual C++”->“Qt”,会有一系列与Qt开发相关的选项。
这些选项通常对应不同的Qt组件或项目元素,可以帮助我们快速创建特定类型的源文件或资源文件,以便构建基于Qt的应用程序。

  • Qt Class:创建一个 Qt 类,通常用于实现特定的功能或逻辑。
  • Qt Dialog Form (Button Bottom):创建一个带有底部按钮的对话框形式的窗口。
  • Qt Dialog Form (Button Right):创建一个带有右侧按钮的对话框形式的窗口。
  • Qt MainWindow Form File:创建一个主窗口形式的文件,通常用于应用程序的主界面。
  • Qt QML File:创建一个 QML 文件,用于描述应用程序的用户界面。
  • Qt QML Module Definition:创建一个 QML 模块定义文件,用于组织和管理 QML 文件。
  • Qt Resource File:创建一个资源文件,用于存储应用程序使用的静态资源(如图像、音频等)。
  • Qt Widget Form File:创建一个基于 Qt Widgets 的窗口形式的文件。
  • Qt Widgets Class:创建一个基于 Qt Widgets 的类,用于实现特定的用户界面元素。
  • Qt Translation File:创建一个翻译文件,用于支持多语言。
  • Qt QML Module Definition:创建一个 QML 模块定义文件,用于组织和管理 QML 文件。

在实际应用程序开发中,常用的 Qt 类型有:

  • Qt Class:最通用的类类型,可以用于创建各种自定义功能。

  • Qt Dialog Form (Button Bottom):在需要用户输入或确认信息时很常见,例如确认对话框或设置对话框。

  • Qt MainWindow Form File:主窗口是应用程序的核心,包含菜单栏、工具栏和中央区域,用于展示应用程序的主要内容。

  • Qt Widget Form File:Widgets 是构建传统桌面应用程序界面的基本元素,因此这种类型的文件在传统桌面应用程序中非常常见。

  • Qt Translation File:翻译文件,用于支持多语言。在国际化应用程序时非常有用,可以将用户界面文本翻译成不同的语言。

根据你的项目需求,选择合适的选项来创建新的文件。
例如,如果你正在开发一个桌面应用程序,并且需要一个主窗口作为应用程序的入口点,那么你应该选择“Qt MainWindow Form File”。如果你需要创建一个对话框或者特定的用户界面元素,可以选择相应的对话框或 widget 类型。

b. 配置文件属性

① 右键点击刚添加的 MainWindow001.ui 文件,选择属性。
在这里插入图片描述

② 配置和平台为 Release 和x64,项类型选择自定义生成工具,点击应用,左侧会生成自定义生成工具选项,界面如下:
在这里插入图片描述

  • 在命令行输入:
"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"

注意:这个命令行指令,用于调用 Qt 的用户界面编译器(UI Compiler,简称 UIC),将用户界面文件(通常是以.ui为扩展名的文件)转换为相应的C++头文件。
"$(QTDIR)\bin\uic.exe":指定了 UIC 可执行文件的路径,这个路径通常是 Qt 安装目录下的 bin 文件夹中的 uic.exe 文件。
-o ".\GeneratedFiles\ui_%(Filename).h":指定了输出的文件路径和文件名。-o 参数表示输出,.\GeneratedFiles\ui_%(Filename).h 是输出文件的路径,%(Filename) 是输入文件的文件名,这里是为了保留输入文件的文件名,而在前面加上了"ui_"前缀。
"%(FullPath)":表示要转换的用户界面文件的完整路径。这个路径是在命令行中传入的。

  • 说明输入:
Uic%27ing %(Identity)...

注意:这个说明描述了正在进行的操作【表示正在使用 UIC 进行处理】
其中使用了参数 %27 来表示单引号 ',因此 :
‘%27ing’ 实际上就是 ‘ing’
‘%(Identity)’ 是一个通配符,代表输入文件的路径

  • 输出输入:
.\GeneratedFiles\ui_%(Filename).h;%(Outputs)

注意:关于输出的文件路径的描述,其中包含了一个通配符 %(Filename) 和一个占位符 %(Outputs)
.\GeneratedFiles\ui_%(Filename).h:表示输出文件的路径,其中 % (Filename) 是一个通配符,代表输入文件的文件名,然后加上了 "ui_" 前缀,表示输出文件的文件名。
%(Outputs):这是一个占位符,用于表示所有的输出文件。在这个上下文中,它实际上是一个空白的占位符,因为这个命令行中没有其他输出文件被指定。

  • 附加依赖项输入:
$(QTDIR)\bin\uic.exe;%(AdditionalInputs)

注意:表示在执行编译任务时,除了需要使用 Qt 的 UIC 可执行文件外,可能还需要其他的额外输入依赖项,这些额外的输入依赖项由 %(AdditionalInputs) 占位符代表。
$(QTDIR)\bin\uic.exe:表示 UIC 可执行文件的路径,通常位于 Qt 的安装目录下的 bin 文件夹中。这个路径是一个固定的依赖项,确保在执行编译任务时能够找到 UIC 可执行文件。
%(AdditionalInputs):一个占位符,用于表示额外的输入依赖项。在这个上下文中,它可能包含了其他与编译任务相关的输入文件,但具体内容没有在提供的上下文中指定。

  • 链接对象选择:是。

③ 选择 视图->其他窗口->属性管理器。
在这里插入图片描述

选项 Release | x64 右键>添加新项目属性表。这里命名为”PropertySheet001.props”。
在这里插入图片描述

④ detector->Release | x64->PropertySheet01.props->属性->用户宏->添加宏。

名称: QTDIR
值:D:\software\QT\6.6.2\msvc2019_64

在这里插入图片描述

在这里插入图片描述

c. 编译UI文件

① 切换回:视图>解决方案资源管理器。
在这里插入图片描述

② 右键ui文件,选择编译。
在这里插入图片描述

你会发现在路径…\build\GeneratedFiles下生成了 ui_MainWindow001.h 文件。
在这里插入图片描述

③ 右键项目,选择添加->现有项->.\GeneratedFiles\ui_MainWindow001.h,里面是UI界面控件的定义声明。
在这里插入图片描述

添加后,该头文件会自动添加到我们的项目 头文件 文件夹中。
在这里插入图片描述

可以打开这个头文件看一下,会发现里面都是 Qt定义的各种界面属性 代码,包括各种你的控件:

/********************************************************************************
** Form generated from reading UI file 'MainWindow001.ui'
**
** Created by: Qt User Interface Compiler version 6.6.2
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_MAINWINDOW001_H
#define UI_MAINWINDOW001_H

#include <QtCore/QVariant>
#include <QtWidgets/QApplication>
#include <QtWidgets/QLineEdit>
#include <QtWidgets/QMainWindow>
#include <QtWidgets/QMenuBar>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QStatusBar>
#include <QtWidgets/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MainWindow
{
   
public:
    QWidget *centralwidget;
    QPushButton *pushButton_model;
    QPushButton *pushButton_img;
    QLineEdit *lineEdit_model;
    QLineEdit *lineEdit_img;
    QPushButton *pushButton_run;
    QMenuBar *menubar;
    QStatusBar *statusbar;

    void setupUi(QMainWindow *MainWindow)
    {
   
        if (MainWindow->objectName().isEmpty())
            MainWindow->setObjectName("MainWindow");
        MainWindow->resize(800, 600);
        centralwidget = new QWidget(MainWindow);
        centralwidget->setObjectName("centralwidget")

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

斯坦福2024人工智能指数报告 1

《人工智能指数报告》由斯坦福大学、AI指数指导委员会及业内众多大佬Raymond Perrault、Erik Brynjolfsson 、James Manyika、Jack Clark等人员和组织合著&#xff0c;旨在追踪、整理、提炼并可视化与人工智能&#xff08;AI&#xff09;相关各类数据&#xff0c;该报告已被大多…

Redis学习篇2:Redis在Spring中的应用

本文继上文开始讲述了Redis在IDEA中如何应用以及集成进入spring开发环境&#xff0c;以及如何使用Redis客户端。上一个文章&#xff1a;Redis学习篇1&#xff1a;初识Redishttps://blog.csdn.net/jialuosi/article/details/139057088 一、Redis在java中的客户端 二、SpringDat…

前缀和,差分算法理解

前缀和是什么&#xff1a; 前缀和指一个数组的某下标之前的所有数组元素的和&#xff08;包含其自身&#xff09;。前缀和分为一维前缀和&#xff0c;以及二维前缀和。前缀和是一种重要的预处理&#xff0c;能够降低算法的时间复杂度 说个人话就是比如有一个数组&#xff1a; …

基于ssm的蛋糕商城系统java项目jsp项目javaweb

文章目录 蛋糕商城系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目源码&#xff08;9.9&#xffe5;带走&#xff09; 蛋糕商城系统 一、项目演示 蛋糕商城管理系统 二、项目介绍 系统角色 : 管理员、用户 一&#xff0c;管理员 管理员有…

Android硬件渲染流程

Android硬件渲染流程 一.渲染流程1.VSync信号的监听2.VSync信号触发绘制 二.渲染原理1.画布的获取1.1 画布的创建1.2 渲染指令列表的创建 2.绘制与渲染指令2.1 矩形的绘制2.2 硬件渲染指令2.3 节点的绘制 3.绘制的提交3.1 绘制结果的保存3.2 绘制结果的获取 4.层级的构建4.1 绘…

Docker 安装kingbase V8r6

下载 官网下载&#xff0c;注意&#xff1a;这里下载 Docker 版本v8r6 安装 # 导入镜像 docker load -i kingbase.tar# 重命名 docker tag [image-name]:[tag] [new-image-name]:[new-tag]# 删除 docker rmi [image-name]:[tag]# 创建容器 docker run -tid \ --privileged \…

2024-6-遥远的救世主

2024-6-遥远的救世主 2024-4-18 豆豆 fatux&#xff1a; 2021.5.26 看完电视剧《天道》之后购买本书&#xff0c;断断续续一直没有读完。 非常好奇&#xff0c;一个什么样的作者能写出如此奇书。老丁&#xff0c;一个智者&#xff0c;智者是多么孤独&#xff0c;因为找不到同…

Javascript特效之鼠标悬停特效【css】

先看一看效果&#xff0c;是不是很炫酷啊&#xff1f;&#xff1f; HTML代码&#xff1a; <!DOCTYPE html> <html><head><meta charset""UTF-8"" /><title>CSS特效&#xff1a;鼠标悬停效果</title><link rel&q…

Linux下Vision Mamba环境配置+多CUDA版本切换

上篇文章大致讲了下Vision Mamba的相关知识&#xff0c;网上关于Vision Mamba的配置博客太多&#xff0c;笔者主要用来整合下。 笔者在Win10和Linux下分别尝试配置相关环境。 Win10下配置 失败 \textcolor{red}{失败} 失败&#xff0c;最后出现的问题如下&#xff1a; https://…

深入了解数据库设计中的规范化与反规范化

目录 零、前言 一、一些基本术语 二、关系模式 2.1. 什么是关系模式 2.2. 示例 三、数据依赖 3.1. 函数依赖 3.1.1. 完全函数依赖 3.1.2. 部分函数依赖 3.1.3. 传递函数依赖 3.2. 多值依赖 3.3. 连接依赖 四、规范化 4.1. 第一范式&#xff08;1NF&#xff09; …

C++/ cuda kernel中的模版元编程识别 kernel 模版的数据类型

1&#xff0c;模版元编程 模板元编程是一种利用 C 模板系统在编译时进行计算和生成代码的技术。其原理基于模板特化、递归、模板参数推导等特性&#xff0c;通过模板实例化和展开&#xff0c;在编译时生成代码&#xff0c;以实现在编译期间进行复杂计算和代码生成的目的。 2&am…

Git--本地仓库

文章目录 工作区和暂存区工作区&#xff08;Working Directory&#xff09;版本库&#xff08;Repository&#xff09; 初始化git仓库添加文件到版本库步骤 查看修改内容查看工作区和暂存区状态已add文件已修改/新增 的未add文件git跟踪修改原理 查看提交历史版本回退撤销修改撤…

【组合数学】常考试题答案

一、单项选择题&#xff08;每小题3分&#xff0c;共15分&#xff09; 1. 用3个“1”和4个“0”能组成&#xff08; &#xff09;个不同的二进制数字。 A. 35 B. 36, C. 37, D. 38 2. 整除300的正整数的个数为&#xff08;  &#xff09;。 A. 14…

面试中算法(A星寻路算法)

一、问题需求&#xff1a; 迷宫寻路游戏中&#xff0c;有一些小怪物要攻击主角&#xff0c;现在希望你给这些小怪物加上聪 明的AI (Artificial Intelligence&#xff0c;人工智能&#xff09;&#xff0c;让它们可以自动绕过迷宫中的障碍物&#xff0c;寻找到主角的所在。 A星…

DNS服务的部署与配置(2)

1、dns的安装及开启 dnf install bind.x86_64 -y #安装 #Berkeley Internet Name Domain (BIND) systemctl enable --now named #启用dns服务&#xff0c;服务名称叫named firewall-cmd --permanent --add-servicedns #火墙设置 firewall-cmd --reload …

学 Java 具体能干什么?

学习 Java 后&#xff0c;你可以从事许多不同的工作和项目&#xff0c;涵盖了广泛的应用领域。以下是一些具体的应用场景和工作方向&#xff1a; 1. 企业级应用开发 Java 是企业级应用开发的首选语言之一&#xff0c;特别适合开发大规模、分布式、多层次的企业应用程序。 Jav…

使用 LangFuse 意外被挂马!我是怎么恢复系统稳定的?

在使用 LangFuse 过程中,被意外挂马!通过一番折腾服务恢复正常~ 本文将详细介绍应对恶意脚本和进程的完整方案,包括识别、清理、恢复和预防步骤。 阿里云扫到的信息 被执行的 Base64 SUlaQnRTCmV4ZWMgJj4vZGV2L251bGwKSUhDa0hQbmQ9Li8uJChkYXRlfG1kNXN1bXxoZWFkIC1jMjApCl…

深度学习面试问题总结(21)| 模型优化

本文给大家带来的百面算法工程师是深度学习模型优化面试总结&#xff0c;文章内总结了常见的提问问题&#xff0c;旨在为广大学子模拟出更贴合实际的面试问答场景。在这篇文章中&#xff0c;我们还将介绍一些常见的深度学习面试问题&#xff0c;并提供参考的回答及其理论基础&a…

【WEEK13】 【DAY5】Shiro第五部分【中文版】

2024.5.24 Friday 接上文【WEEK13】 【DAY4】Shiro第四部分【中文版】 目录 15.7.Shiro请求授权的实现15.7.1.修改ShiroConfig.java15.7.1.1.添加一行验证授权的代码15.7.1.2.重启 15.7.2.修改MyController.java15.7.3.修改ShiroConfig.java15.7.4.重启15.7.5.修改UserRealm.ja…

汽车以太网发展现状及挑战

一、汽车以太网技术联盟 目前推动汽车以太网技术应用与发展的组织包括&#xff1a;OPEN Alliance&#xff08;One-Pair Ether-Net Alliance SIG&#xff09;联盟&#xff0c;主要致力于汽车以太网推广与使用&#xff0c;该联盟通过推进 BroadR- Reach 单对非屏蔽双绞线以太网传…