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

这篇具有很好参考价值的文章主要介绍了Qt 项目A调用项目B方法(项目架构管理)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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

一、建立项目目录

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

1、文件 -> 新建文件或项目 -> 其他项目 -> 子目录项目
注:项目名:TotalProject

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

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

别忘加上面这句代码了

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

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

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

注:子项目1名字为 Item1

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

现在项目结构如图:
Qt 项目A调用项目B方法(项目架构管理)

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

二、项目关联

1、新建 global.h 文件

文件 -> 新建文件或项目 -> Library -> C++库 -> 类型:共享库 -> Kit Selection -> 选择QtCore -> 类名 -> Next
注:为了减少更名的麻烦,所以这里我将类名直接设置为 Item2
如图1:
Qt 项目A调用项目B方法(项目架构管理)
图2:
Qt 项目A调用项目B方法(项目架构管理)

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

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

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 中

效果如图:
Qt 项目A调用项目B方法(项目架构管理)

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文件里面

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

Qt 项目A调用项目B方法(项目架构管理)文章来源地址https://www.toymoban.com/news/detail-417104.html

到了这里,关于Qt 项目A调用项目B方法(项目架构管理)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • QT学习开发笔记(项目实战之智能家居物联网项目1 )

    本章介绍使用 Qt 开发智能家居中的一个物联应用。简单直白的说就是通过云服务器远程控 制设备(与设备通信等)。本章可以直接做毕设,是毕设物联网项目的一大福音!本章将实现远 程点亮开发板 LED 作为一个项目实例。 在生活中,我们可能使用过 WIFI 智能插座这款产品

    2023年04月13日
    浏览(40)
  • QT学习开发笔记(项目实战之智能家居物联 UI 界面开发 )

    项目路径为 4/01_smarthome/01_smarthome/01_smarthome.pro,先看项目界面。项目界面如 下,采用暗黑主题设计,结合黄色作为亮色,让用户一目了然。界面笔者从一些智能家居界面 中找到灵感的,编写设计完成的效果不错!请自行查阅源码,掌握了本教程前面第七章的内容, 就可以理

    2024年02月16日
    浏览(39)
  • Qt5.15.2安卓Android项目开发环境配置

    官方下载:https://download.qt.io/archive/qtcreator/4.11/4.11.2/ 镜像下载:https://mirrors.cloud.tencent.com/qt/archive/qtcreator/4.11/4.11.2/ 官方更新器内部下载 参考:https://blog.csdn.net/weixin_41013202/article/details/129957693 https://adoptium.net/zh-CN/temurin/releases/ (1) Android SDK Platform 最新版(现在是33) (2)

    2024年02月14日
    浏览(33)
  • kafka发布订阅原理,Java项目开发如何设计整体架构

    源码阅读,最核心有三点:技术基础+强烈的求知欲+耐心。 1.1 设计模式(45设计模式:介绍+优缺点+应用实例+源代码+解决问题) 1.2 Spring复习大纲:依赖注入Ioc+Beans+注解+数据访问+AOP+MVC等 1.3 Spring全家桶笔记:Spring+Spring Boot+Spring Cloud+Spring MVC 面试题(含解析)+学习书籍+学习

    2024年03月12日
    浏览(50)
  • VS开发QT项目,手写按钮槽函数避坑

    由于最近开发需要在VS2017上配置QT开发环境,进行QT项目的开发,之前从来没有这样使用过,在此记一些坑。 QT的槽函数是非常方便的,使用QT Creator可以自动生成代码,方便快捷。但是代码可读性不强,一些连接方面的信息都被隐藏了。由于之前一直使用QT Creator,所以其实还

    2023年04月13日
    浏览(26)
  • 项目开发代码分支管理

    项目开发流程系列 项目开发混淆从初识到理解 项目开发代码分支管理 博客创建时间:2022.08.27 博客更新时间:2022.08.28 以Android studio build=7.0.0,SDKVersion 31来分析讲解。如图文和网上其他资料不一致,可能是别的资料版本较低而已。 在团队开发中,当有多个需求版本进行并发

    2023年04月08日
    浏览(71)
  • Vue的架构以及基于脚手架环境开发vue项目

    M:model 模型层(业务逻辑层),主要包含 JS 代码,用于管理业务逻辑的实现。 V:View 视图层,主要包括 HTML / CSS代码,用于管理 UI 的展示。 VM:viewModel (视图模型层),用于将data与视图层的 DOM 进行动态绑定。 基于脚手架环境开发Vue项目 制作web 从小作坊状态转向工程化开

    2024年02月01日
    浏览(31)
  • uni-app开发小程序:项目架构以及经验分享

    2022年的时候,公司为了快速完成产品并上线,所以选用微信小程序为载体;由于后期还是打算开发App;虽然公司有ios和Android,但是如果能一套代码打包多端,一定程度上可以解决成本;前端技术栈也是vue,在考察选择了uni-app。后来多个小程序项目都采用了uni-app开发,积累了

    2024年02月09日
    浏览(43)
  • QT使用MQTT协议连接ONENET云平台:智能家居PC客户端开发笔记-2 项目开发

    这篇文章主要是分享QT智能家居项目的代码 在我看来,QT MQTT的使用主要难点就是对于环境的搭建,在我们把环境搭建完之后,接下来就是传统手艺了,我们只要知道相应的库函数,调用它,就能实现我们所需要的功能了。 所以,在这里我也只是简单的分享一下我写的第一版

    2024年02月16日
    浏览(35)
  • STM32MP157开发板Linux+Qt项目实战:智慧家庭

    stm32mp157开发板FS-MP1A是华清远见自主研发的一款高品质、高性价比的Linux+单片机二合一的嵌入式教学级开发板。开发板搭载ST的STM32MP157高性能微处理器,集成2个Cortex-A7核和1个Cortex-M4 核,A7核上可以跑Linux操作系统,M4核上可以跑FreeRTOS、RT-Thread等实时操作系统。开发板搭配仿真

    2024年02月09日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包