Qt开发(2)——在已有VS项目中配置Qt

在之前的Qt开发学习中,基本都是在Qt Creator中创建一个Qt项目,或者即便是在VS中也是直接新建一个Qt项目。但很少有记录如何在已有的C++项目中添加Qt,这就好比我有个项目已经开发完了,现在又说加个Qt界面的功能。这篇文章就是记录如何在已有项目上配置Qt

目录

配置包含目录以及链接器

添加Qt界面 

添加UI文件

配置ui

编译ui文件

生成ui对应的h文件

使用moc生成cpp文件

写Main函数 


在已有项目中配置Qt是比较麻烦的,不想python的pyqt那么方便。这里需要配置很多东西。

假设我有一个已有的项目MyWidget(这里还没有加入任何Qt代码)。如下图:

代码中除了一个main.cpp就没别的代码了。

 (这里先默认你已经安装了Qt Creator,并且也在VS中添加了Qt插件)


先来说下我的环境:

VS 2017

Qt 5.14.2


配置包含目录以及链接器

右键项目->属性->VC++目录

然后在包含目录库目录中配置你的Qt  include和lib路径:

我这里的包含目录和库目录如下(需要根据你的Qt安装路径来配置):每配置完一项后点下应用

包含目录:E:\Qt\Qt5.14.2\5.14.2\msvc2017_64\include

库目录:E:\Qt\Qt5.14.2\5.14.2\msvc2017_64\lib

 然后添加依赖项:链接器->输入->附加依赖项  (同样配置完点应用)

我添加的和Qt有关的依赖项如下:

Qt5Widgetsd.lib
Qt5Widgets.lib
Qt5Guid.lib
Qt5Gui.lib
Qt5Cored.lib
Qt5Core.lib


添加Qt界面 

添加UI文件

在项目中我们需要添加.ui文件,方便我们设计。

右键自己的项目->点击添加->新建项Visual C++->Qt->Qt Widgets Class

此时可以看到.ui文件已经添加到了我们的项目中。然后和Qt Creator我们创建的ui文件一样,我们可以直接双击打开,在里面设计我们的界面。 (比如我在这里加一个按钮)

 

配置ui

右键刚添加的ui文件,然后点击属性。在跳出的界面中项类型选择自定义生成工具,然后点击应用,此时会在左边的配置属性中出现一个自定义生成工具

然后点击自定义生成工具->常规,需要添加以下内容:

1.在命令行输入:

"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)" 

2.在说明输入:

Uic%27ing %(Identity)... 

3.在输出输入:

.\GeneratedFiles\ui_%(Filename).h;%(Outputs) 

4.附加依赖项:

 $(QTDIR)\bin\uic.exe;%(AdditionalInputs)

5.链接对象选择

接下来点击属性管理器。

右键Debug|x64,点击添加新项目属性表

然后我们在添加的这个属性表中点击右键->通用属性->用户宏->添加用户宏

添加名称为:QTDIR

添加值为:E:\Qt\Qt5.14.2\5.14.2\msvc2017_64

编译ui文件

生成ui对应的h文件

右键我们的ui文件,点击编译。编译成功后我们会发现在我们的项目中会自动生成一个文件夹GeneratedFiles里面包含一个头文件:ui_MyWidget.h

然后右键我们的项目选择添加->现有项,选择上面生成的 ui_MyWidget.h,此时该头文件会自动添加到我们的项目头文件文件夹中。(可以打开这个头文件看一下,会发现里面都是Qt定义的各种界面属性代码,包括各种你的控件)

使用moc生成cpp文件

点击自己定义的含有Q_OBJECT的头文件(也就是我这里的MyWidget.h文件)。代码如下:

#pragma once#include <QtWidgets/QWidget>
#include "ui_MyWidget.h"class MyWidget : public QWidget
{Q_OBJECTpublic:MyWidget(QWidget *parent = nullptr);~MyWidget();private:Ui::MyWidgetClass ui;
};

然后右击头文件MyWidget.h,属性在常规中的项类型选择为自定义生成工具,再点击应用

和上面的操作类似

1.命令输入:

"$(QTDIR)\bin\moc.exe" "%(FullPath)" -o ".\GeneratedFiles\moc_%(Filename).cpp"

2.说明:

Moc%27ing %(Identity)... 

3.输出:

.\GeneratedFiles\moc_%(Filename).cpp 

4.附加依赖项

$(QTDIR)\bin\moc.exe;%(FullPath) 

5.链接对象选择是 

同理,右击头文件MyWidget.h然后点击编译,会在GeneratedFiles/生成一个moc_MyWidget.cpp文件。然后右键项目->添加->现有项,选择添加生成的cpp文件

写Main函数 

 然后main函数代码如下:

#include <stdio.h>
#include "MyWidget.h"
#include <QtWidgets/QApplication>using namespace std;
int main(int argc, char* argv[])
{QApplication a(argc, argv);MyWidget w;w.show();return a.exec();
}

 

 界面如下:

有上面界面就说明在已有的C++项目中我们可以添加配置Qt了,然后就是根据自己的需要实现各种信号槽函数。 

那么可以发现一个问题,如果我们在ui文件的界面中又添加了一个按钮或者其他控件的时候,会发现ui对应的头文件中并没有更新相应的代码,那么此时我们应该怎么办呢?其实也很简单,就是我们再通过上述生成ui对应h文件的过程对ui文件重写编译一下在生成头文件即可


 

参考:VS2019现有项目添加Qt界面_vs2019增加qt-CSDN博客

[C++]在VS2017中,添加Qt的ui文件,编译运行opencv+qt5程序的过程_c++如何调用qt5-CSDN博客

VS2015编译QT的ui文件_vs qt ui编译-CSDN博客 

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

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

相关文章

2024年4月份 风车IM即时通讯系统APP源码 版完整苹果安卓教程

关于风车IM&#xff0c;你在互联网上能随便下载到了基本都是残缺品&#xff0c; 经过我们不懈努力最终提供性价比最高&#xff0c;最完美的版本&#xff0c; 懂货的朋友可以直接下载该版本使用&#xff0c;经过严格测试&#xff0c;该版本基本完美无缺。 下载地址&#xff1a;…

Matlab|计及电池储能寿命损耗的微电网经济调度

目录 1 主要内容 储能寿命模型 负荷需求响应 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序参考文献《考虑寿命损耗的微网电池储能容量优化配置》模型&#xff0c;以购售电成本、燃料成本和储能寿命损耗成本三者之和为目标函数&#xff0c;创新考虑储能寿命损耗约…

蓝桥杯2023年第十四届省赛真题:公因数匹配|数论:分解质因数

前置知识&#xff1a; 下列定理证明来自洛谷题解区&#xff1a; B3715 分解质因子 2 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 学习参考、分解质因数模板&#xff1a; 第二十三章 数论——质数&#xff08;1&#xff09;&#xff08;超级详细的推导&#xff09;_数论中…

学点儿数据库_Day11_多表、等值连接、内连接、模糊查找

1 多表 学生表、班级表、课程表、班级课程表 关系型数据库&#xff1a; MySql、SqlServer、Oracle 相同的数据出现多次绝不是一件好事&#xff0c;这是关系数据库设计的基础。关系表的设计就是要把信息分解成多个表&#xff0c;一个数据一个表&#xff0c;各表通过某些共同的…

Python学习笔记------文件操作

编码 编码就是一种规则集合&#xff0c;记录了内容和二进制间进行相互转换的逻辑。 编码有许多中&#xff0c;我们最常用的是UTF-8编码 计算机只认识0和1&#xff0c;所以需要将内容翻译成0和1才能保存在计算机中。同时也需要编码&#xff0c;将计算机保存的0和1&#xff0c…

【Canvas与艺术】模拟八一电影制片厂电影片头效果

【缘起】 八一厂每部电影前都有其专有开头&#xff0c;如&#xff1a;https://www.ixigua.com/6799821997258834440?logTag2eacce76401e13f9efe7 这个片头可以用canvas模拟下来。 【关键点】 线型放射状粒子系统的运作。 立体感五角星的绘制。 【图例】 【代码】 <!D…

江协STM32:点亮第一个LED灯和流水灯

很多单片机都是高电平弱驱动&#xff0c;低电平强驱动&#xff0c;所以这里是低电平有效 点亮一个LED灯 操作STM32的GPIO需要三个操作&#xff1a; 第一个使用RCC开启GPIO的时钟 第二步使用GPIO_Init函数初始化GPIO 第三步使用输出或输入函数控制GPIO 1.使用RCC开启GPIO的时…

maya导入导出bvh 自动 脚本

目录 maya打开脚本编辑器 运行打开bvh脚本 maya导出bvh脚本 maya打开脚本编辑器 打开Maya软件,点击右下角 “脚本编辑器” 运行打开bvh脚本<

自省式RAG 与 LangGraph的实践

自省式 RAG 对实现 RAG 的步骤进行逻辑分析&#xff1a;比如&#xff0c;我们需要知道什么时候进行检索&#xff08;基于问题和索引的构成&#xff09;、何时改写问题以提升检索效率&#xff0c;或者何时抛弃无关的检索结果并重新检索。因此提出了自省式 RAG&#xff0c;自省式…

车载以太网AVB交换机 TSN交换机 时间敏感网络 6端口 百兆 SW100TSN

SW100 TSN时间敏感网络AVB交换机 为6端口百兆车载以太网交换机&#xff0c;其中包含5通道100BASE-T1泰科MATEnet接口和1个通道100/1000BASE-T标准以太网(RJ45接口)&#xff0c;可以实现纳米级时间同步&#xff0c;车载以太网多通道交换&#xff0c;Bypass数据采集和监控等功能&…

【Linux】进程状态(R运行状态、S睡眠状态、D磁盘休眠状态、T停止状态、X死亡状态)

目录 01.运行状态 02.睡眠状态 03.磁盘睡眠状态 04.停止状态 05.死亡状态 进程的状态会随着操作系统的调度和外部事件的发生而不断地发生转换。例如&#xff0c;一个新创建的进程经过初始化后会进入就绪态&#xff0c;等待被调度执行&#xff1b;当调度器分配处理器资源给…

SpringBoot学习笔记一、SpringBoot应用初创建以及应用

一、创建SpringBoot的两种方式 1.Spring Initializr方式创建 &#xff08;1&#xff09;第一步在IDEA中选择 File-->NEW-->Project &#xff0c;选择 Spring Initializr &#xff0c;指定Maven坐标、包名、指定 JDK 版本 1.8 &#xff0c;然后点击Next 。如下图&#x…