Qt 项目A调用项目B方法(项目架构管理)

news2024/10/7 9:25:51

前言

项目开发中,如果项目比较大,大多采用多项目的方式,主要是为了方便代码管理,也更开发变得更加方便。操作如下:
注:我用的版本是Qt 5.12.3

一、建立项目目录

要求:
1、项目A为主,项目B为辅;
2、定位:A为主要实现业务上界面交互,B为A提供方法支持,相当于将B作为一个可实时编辑的库

1、文件 -> 新建文件或项目 -> 其他项目 -> 子目录项目

注:项目名:TotalProject

新建项目

2、打开刚才项目的 .pro 文件,并编辑

TEMPLATM = subdirs

别忘加上面这句代码了

3、鼠标放置在项目名上,右键 新建子项目

子项目1

4、如上图,选择Application -> Qt Widget Application -> Choose -> 继续填写信息直至完成

注:子项目1名字为 Item1

5、重复3和4的动作,新建了2个子项目,名字为Item1和Item2

现在项目结构如图:
结构图

6、此时两个子项目没有任何关系,后面要做的就是将项目关联起来

二、项目关联

1、新建 global.h 文件

文件 -> 新建文件或项目 -> Library -> C++库 -> 类型:共享库 -> Kit Selection -> 选择QtCore -> 类名 -> Next
注:为了减少更名的麻烦,所以这里我将类名直接设置为 Item2
如图1:
Library
图2:
QtCore

2、此时得到了一个 Item2_global.h 文件

如图:
global

3、编辑 global.h 文件 和 Item2.pro 文件

3.1 在 Item2.pro 文件中加入代码:

DEFINES += ITEM2_LIB
TEMPLATE = lib

注:名字根据自己项目来即可,方便管理和阅读;(命名建议:项目名_LIB)

3.2 在global.h 文件中修改代码:
原代码:

#ifndef ITEM2_GLOBAL_H
#define ITEM2_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(ITEM2_LIBRARY)
#  define ITEM2SHARED_EXPORT Q_DECL_EXPORT
#else
#  define ITEM2SHARED_EXPORT Q_DECL_IMPORT
#endif

#endif // ITEM2_GLOBAL_H

修改后

#ifndef ITEM2_GLOBAL_H
#define ITEM2_GLOBAL_H

#include <QtCore/qglobal.h>

#if defined(ITEM2_LIB)
#  define ITEM2_EXPORT Q_DECL_EXPORT
#else
#  define ITEM2_EXPORT Q_DECL_IMPORT
#endif

#endif // ITEM2_GLOBAL_H

4、将 global.h 文件拷贝到 Item2 项目目录下,并添加现有文件,将 global.h 加入项目 Item2 中

效果如图:
添加global之后

5、编辑 Item2 项目文件

注:文件有 Item2.h和 Item2.cpp
在 Item2.h 头文件中,加入代码 ITEM2_EXPORT

class ITEM2_EXPORT Item_two{
public:
	Item_two();
	int maxValue(const int, const int);	
}

ITEM2_EXPORT 就是之前在 global.h 文件的,一定要对应

6、编辑 Item1.pro 文件

1、增加includePath 和 libs

INCLUDEPATH += $$PWD/../Item2
LIBS += D:/Code/build/Item2/debug/item2.lib

注:LIBS 我是直接在构建 Item2 之后,拿到的 item2.lib 的路径,这是绝对路径,建议用相对路径

相对路径:

CONFIG(debug, debug | release){
	DESTDIR += $${PWD}/../Runs/debug				#DESTDIR 目标程序生成目录
	LIBS	+= $${PWD}/../Runs/debug/Item2.lib		#libs 库生成目录
}else{
	DESTDIR += $${PWD}/../Runs/release				#DESTDIR 目标程序生成目录
	LIBS	+= $${PWD}/../Runs/release/Item2.lib
}

7、编辑 TotalProject.pro 文件

CONFIG += ordered

SUBDIRS += \
	Item2 \ 
	Item1

三、验证

方式:item1 上去调用 item2 的方法 maxValue

1、cpp 实现 item_two.h 的 maxValue 方法

int Item_two::maxValue(const int a, const int b){
	return a > b ? a : b;
}

2、在 Item_one.h 文件 include “Item_two.h”,并调用 maxValue 方法

Item_two v;
int value = v.maxValue(10, 15);
qDebug() << value;

3、构建 -> 运行

此时应该是报错的

错误1:无法解析外部符号,未找到文件 Item1.obj 或者 ***.obj

解决方法:文章第二节《项目关联》中第6小节,设置LIBS。(应该是LIB路径不对)

错误2:由于找不到Item2.dll,无法继续执行代码

解决方法:去项目build路径下,在Item2文件中的Item2.dll,将该文件复制到 Item1 文件夹中debug文件里面

上述两个问题解决之后,基本上就可以运行成功了。

结果

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

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

相关文章

FreeRTOS中的任务与任务切换(笔记)

目录任务的定义栈和任务栈任务控制块任务初始化函数初始化任务栈任务创建函数pxTopOfStack任务列表初始化将任务插入到就绪列表中调度器xPortStartScheduler() 函数prvStartFirstTask()函数 &#xff08;该函数是偏硬件底层的函数&#xff0c;用汇编语言编写&#xff0c;在port…

中电金信「财务公司核心系统白皮书」正式发布!

随着数字技术的深度应用&#xff0c;数字化转型正迎来新一轮变革。如何促进企业战略转型&#xff0c;助力企业发展提质增效&#xff0c;以标准化、数字化、精细化支撑企业实现高质量发展&#xff0c;已成为财务公司数字化转型的重要课题。 为推进财务公司数字化转型工作要求&a…

恢复照片软件推荐,照片恢复就这么做!

案例&#xff1a;好用的恢复照片软件 【作为一名摄影博主&#xff0c;我每天拍的照片太多了&#xff0c;在筛选的时候总是容易错删重要的照片&#xff0c;大家有什么比较好的照片恢复软件或方法可以推荐吗&#xff1f;万分期待!】 随着数字化时代的发展&#xff0c;人们越来越…

QPixmap存在的坑,内存泄漏

QPixmap加载图片的时候&#xff0c;会把图片数据加入到QPixmapCache缓冲区上 如果多次加载&#xff0c;那么内存会被吃掉越来越多 本意QPixmap是用于显示需要比较快的地方&#xff0c;和硬件关联 QPixmap变量之间的赋值&#xff0c;并不会构造新的图片数据内存&#xff0c;而…

基于Eclipse下使用arm gcc开发GD32调用printf

系列目录 第一章 xxx 目录 系列目录 文章目录 文章目录 系列文章目录前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结前言 开发环境&#xff1a;Eclipse代替Keil&#xff0c;IAR 开发平台&#xff1a;GD32 开发编译器&#xff1a;arm-none-eabi- …

Adobe Acrobat Pro DC 2022的系统要求

Adobe Acrobat Pro DC 2022是一款功能强大的PDF编辑和管理软件。它可以帮助用户创建、编辑、转换、签署和共享PDF文档&#xff0c;并提供了多种工具和功能来优化文档的可访问性、安全性和可靠性。 Adobe Acrobat Pro DC 2022功能特色&#xff1a; 创建和编辑PDF文档&#xff1…

《低代码PaaS驱动集团企业数字化创新白皮书》-大型集团企业的数字化困局

大型集团企业的数字化困局 现状 /态势&#xff1a;数字化发展动力&#xff0c;构建数字化竞争力&#xff0c;实现敏捷的运营、治理、决策、体验 数字化转型大势所趋 全球化地缘政治紧张局势&#xff0c;供应链、通货膨胀、劳动力短缺以及新冠疫情全球大流行更增加了人们对全球…

HLS_OPENCV库的安装

借此机会来记录一下OPENCV库的安装:   首先需要知道的是说起OPENCV库有两种&#xff0c;一种是OPENCV库&#xff0c;还有一种是Xilinx官方自己的OPENCV库&#xff0c;前者可以用来在HLS中进行仿真&#xff0c;无法进行综合&#xff0c;而后者则是可以进行综合的。现将两种库的…

【综述型论文】图神经网络总结

文章目录图神经网络基于模型结构分类的图神经网络1. 循环图神经网络&#xff08;ResGNNs&#xff09;2. 卷积图神经网络基于谱域的ConvGNNs&#xff08;Spectral-based ConvGNNs&#xff09;基于空域的ConvGNNs&#xff08;Spatial-based ConvGNNs&#xff09;谱域图卷积模型和…

Python遥感开发之FY的批量处理

Python遥感开发之FY的批量处理0 FY遥感数据1 批量提取数据2 批量拼接TIF数据3 批量HAM转WGS投影&#xff08;重要&#xff09;4 批量掩膜裁剪介绍FY数据的格式&#xff0c;以及FY数据的批量提取数据、批量拼接数据、批量投影转换、批量掩膜裁剪等操作。本博客代码参考《 Hammer…

MySQL SQL优化 【建议熟读并背诵】

插入数据 批量插入数据 insert into tb_test values(1,Tom),(2,Cat),(3,Jerry);手动控制事务 start transaction; insert into tb_test values(1,Tom),(2,Cat),(3,Jerry); insert into tb_test values(4,Tom),(5,Cat),(6,Jerry); insert into tb_test values(7,Tom),(8,Cat…

在Windows中使用Linux命令安装这款软件就可以

由于平时经常使用Linux命令&#xff0c;所以导致在Windows的cmd中输入命令的时候经常打错&#xff0c;提示不是内部或外部命令&#xff0c;也不是可运行的程序。 那么有办法将补全cmd命令&#xff0c;使Linux中的命令在Windows中也能使用呢&#xff1f; 下面我来讲解如何在Win…

微服务架构-服务网关(Gateway)-服务网关在微服务中的应用

服务网关在微服务中的应用 我们将目光转向Spring Cloud应用的外围&#xff0c;讨论微服务架构下的各个模块如何对外提供服务。 1、对外服务的难题 微服务架构下的应用系统体系很庞大&#xff0c;光是需要独立部零的基础组件就有注册中心、配置中心和服务总线、Turbine异常聚…

【版本控制】Github同步Gitee镜像仓库自动化脚本

文章目录Github同步Gitee镜像仓库自动化脚本前言什么是Hub Mirror Action&#xff1f;1.介绍2.用法配置步骤1.生成密钥对2.GitHub私钥配置3.Gitee公钥配置4.Gitee生成私人令牌5.Github绑定Gitee令牌6.编写CI脚本7.多仓库同步推送8.定时运行脚本总结Github同步Gitee镜像仓库自动…

Softmax和Cross Entropy Loss在分类问题中的作用

本文以三分类神经网络为例&#xff0c;讲解Softmax和Cross Entropy Loss在分类问题中的作用。 首先&#xff0c;对类别标签进行一位有效编码&#xff1a; y[y1,y2,y3]Ty[y_{1},y_{2},y_{3}]^{T}y[y1​,y2​,y3​]T yi{1,if(iy)0,otherwisey_{i}\left\{\begin{matrix} 1 ,& …

形式语言和自动机总结----正则语言RE

第3-4章正则表达式 正则表达式的设计举例 正则表达式的运算 正则表达式的优先级 举例 1.倒数第三个字符是1 &#xff08;01)*1(01)(01) 2.不含有连续的0 &#xff08;101&#xff09;*&#xff08;0&#xff09; 3.含有000 &#xff08;01&#xff09;*000&#xff08;01&a…

【算法LearnNO.1】算法介绍以及算法的时间复杂度和空间复杂度

目录 一、算法 1、算法概述 2、算法的5个特性 3、设计算法的标准 二、时间复杂度 1、时间复杂度的介绍 2、渐进时间复杂度的求法 3、计算时间复杂度的代码举例&#xff08;平方阶示例&#xff09; 4、时间复杂度排序 三、空间复杂度 一、算法 1、算法概述 算法就是解…

蔚来试水辅助驾驶订阅,NOP+能否吃蟹?

作者 | 德新 编辑 | 王博2021年的NIO Day上&#xff0c;随着当时ET7发布&#xff0c;蔚来最早宣布了智能驾驶订阅服务&#xff1a;NAD&#xff0c;月费680元。 两年后&#xff0c;辅助驾驶订阅模式终于开始落地&#xff1a;蔚来将从7月1日起&#xff0c;对NOP进行收费&#xff…

Nginx基础教程

Nginx 目标 Nginx简介【了解】 Nginx安装配置【掌握】 一、Nginx简介 Nginx称为:负载均衡器或 静态资源服务器:html,css,js,img ​ Nginx(发音为“engine X”)是俄罗斯人编写的十分轻量级的HTTP服务器,是一个高性能的HTTP和反向代理服务器&#xff0c;同时也是一个IMAP/P…

索引优化、优化,你又是一个好MongoDB!!!博学谷狂野架构师

MongoDB索引优化 作者: 博学谷狂野架构师GitHub&#xff1a;GitHub地址 &#xff08;有我精心准备的130本电子书PDF&#xff09;只分享干货、不吹水&#xff0c;让我们一起加油&#xff01;&#x1f604; 索引简介 索引通常能够极大的提高查询的效率&#xff0c;如果没有索引&a…