在学习的过程中发现了一个问题,如果在开发一个项目时,需要将项目划分为几个板块,即子项目,在独立开发这些板块,当这些独立板块完成时,需要将其汇总成为一个项目,这是一个问题。
文章有点长,请耐心实践,本人已经测试过,没有什么问题,如果有,请读者私信我或者在评论区讨论一下。
本片文章在网上搜索学习方法时,将学习的的过程给总结出来,以便于后面遗忘时复习。
通常在使用C++的时候,一般解决办法时将其封装成为一个库,即lib文件,随即在其他的项目中调用即可解决,也便于代码的维护。
演示说明,本文章使用的演示环境为:Qt Creator 5.15.2 使用qmake进行演示
下面直接上演示过程:
一、创建项目
创建子项目我将选择两个子项目,一个子项目是我已经写好的小窗口,另一个子项目选择创建,当然你也可以选择两个项目都使用创建的方式;
(一)创建项目
打开Qt Creator 选择创建项目
创建一个项目,用于形成一个树形结构的项目
这里我选择了创建名为projectDemo的大项目名称,路径自行选择合适的位置
选择使用的编译器,这里我选择使用MinGW,因为这是我平时学习的时候使用的编译器,当然,如果你使用的是MSVC,也是可以的,不影响后续
箭头指向位置通常会选择Git用于跟踪和管理对文件的更改,但我这个demo演示,只用于演示,并不会做其他用处,所有就不选择了,使用默认项(无)
点击完成之后会出现下图:,当然,我们也可以从这里添加子项目,也可以先关闭他,鼠标右击项目,点击新子项目也会出现下图
(二)创建子项目
子项目类型可以根据你的需求去选择,这里我使用创建一个窗口程序,作为子项目
项目名称为demo01,路径自行选择
构建系统我选择qmake
下一步之后我选择类名为DemoWidget,基类为QWidget,并且添加UI文件。
下一步下一步
下一步,之后点击完成
创建第一个子项目成功
目录结构如下:
(三)导入项目
找到你要导入的项目,我想要导入的项目效果如图,这是一个简单的登陆页面,他是一个独立的项目,我想让这个项目在其他的项目中调用,所以我就选择导入项目,由第二步中创建的项目进行调用,当然你也可以选择创建项目形成这个效果:
这里我需要导入的子项目是project,将该项目移动到与第二步创建的demo01项目同级的文件夹中
即这个文件中
移动完成后的效果:
移动完成后,回到Qt Creator中,右键项目,注意不是子项目,是projectDemo这个项目,不是demo01这个子项目,点击 add Existing Projects..选择刚才拷贝的项目中的pro文件,点击打开,会自动添加到我们的项目试图中
如图:
项目创建好了,下面就进行最重要的一步,让子项目中产生联系
二、关联子项目
每一个程序都只能有一个程序入口,即只能有一个main文件,我们创建的项目中,每一个子项目都有一个main文件,所以我们需要删除一个main文件,,因为我需要在demo01这个项目中,调用project这个项目的文件,所以我选择删除被调用项目中的main文件,即删除project中的main.cpp文件
删除步骤,选择main.cpp文件,鼠标右键,点击Remove,点击确认即可
删除后的项目结构
基本的项目结构已经完成,下一步就是为project项目创建一个lib文件,这个lib文件在编译project后生成;
(一)创建.h文件,用于定义项目全局使用的宏和设置
1、在project中创建一个.h文件,即被调用项目中创建,并在该文件中添加下述代码,代码的作用我已经书写在注释中,注意不要完全拷贝,PROJECT需要根据你的项目来修改
#ifndef PROJECT_GLOBAL_H
#define PROJECT_GLOBAL_H
#include <QtCore/qglobal.h>
#if defined(PROJECT_LIBRARY)
# define PROJECT_EXPORT Q_DECL_EXPORT
#else
# define PROJECT_EXPORT Q_DECL_IMPORT
#endif
#endif // PROJECT_GLOBAL_H
2、在project.pro文件中添加代码
在pro文件中添加这三行代码,添加完成之后记得保存该文件,否则不会生效
TARGET = project
TEMPLATE = lib
DEFINES += project_LIBRARY
(二)运行项目
添加完成之后右键该项目,点击构建,让其生成lib文件,即库文件
(三)添加库
右键需要调用这个库文件的项目,即demo01子项目,点击添加库,选择内部库
包含路径选择project项目的路径,即被调用项目的路径即可,点击下一步
点击完成
现在demo01子项目中就可以添加project子项目中的头文件了
三、运行项目
将在demo01子项目中调用project中的文件,这里我选择在main文件中调用,导入头文件后,创建对象,直接运行
运行效果与直接运行project子项目一样
总结
将多个项目联系起来,通过将其他项目通过创建静态库或者动态库的形式,能够让其他的项目能够调用,上述内容,也是使用了这个方法。
文章结束了,需要上述登陆代码的朋友可以私信我,也可以评论留言,这个登陆页面时在写期末作品的时候写的一个模板,可以直接利用,有些功能没有实现,需要的朋友可以自行实现。