前言
項(xiàng)目開發(fā)中,如果項(xiàng)目比較大,大多采用多項(xiàng)目的方式,主要是為了方便代碼管理,也更開發(fā)變得更加方便。操作如下:
注:我用的版本是Qt 5.12.3
一、建立項(xiàng)目目錄
要求:
1、項(xiàng)目A為主,項(xiàng)目B為輔;
2、定位:A為主要實(shí)現(xiàn)業(yè)務(wù)上界面交互,B為A提供方法支持,相當(dāng)于將B作為一個(gè)可實(shí)時(shí)編輯的庫
1、文件 -> 新建文件或項(xiàng)目 -> 其他項(xiàng)目 -> 子目錄項(xiàng)目
注:項(xiàng)目名:TotalProject
2、打開剛才項(xiàng)目的 .pro 文件,并編輯
TEMPLATM = subdirs
別忘加上面這句代碼了
3、鼠標(biāo)放置在項(xiàng)目名上,右鍵 新建子項(xiàng)目
4、如上圖,選擇Application -> Qt Widget Application -> Choose -> 繼續(xù)填寫信息直至完成
注:子項(xiàng)目1名字為 Item1
5、重復(fù)3和4的動(dòng)作,新建了2個(gè)子項(xiàng)目,名字為Item1和Item2
現(xiàn)在項(xiàng)目結(jié)構(gòu)如圖:
6、此時(shí)兩個(gè)子項(xiàng)目沒有任何關(guān)系,后面要做的就是將項(xiàng)目關(guān)聯(lián)起來
二、項(xiàng)目關(guān)聯(lián)
1、新建 global.h 文件
文件 -> 新建文件或項(xiàng)目 -> Library -> C++庫 -> 類型:共享庫 -> Kit Selection -> 選擇QtCore -> 類名 -> Next
注:為了減少更名的麻煩,所以這里我將類名直接設(shè)置為 Item2
如圖1:
圖2:
2、此時(shí)得到了一個(gè) Item2_global.h 文件
如圖:
3、編輯 global.h 文件 和 Item2.pro 文件
3.1 在 Item2.pro 文件中加入代碼:
DEFINES += ITEM2_LIB
TEMPLATE = lib
注:名字根據(jù)自己項(xiàng)目來即可,方便管理和閱讀;(命名建議:項(xiàng)目名_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 項(xiàng)目目錄下,并添加現(xiàn)有文件,將 global.h 加入項(xiàng)目 Item2 中
效果如圖:
5、編輯 Item2 項(xiàng)目文件
注:文件有 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 文件的,一定要對應(yīng)
6、編輯 Item1.pro 文件
1、增加includePath 和 libs
INCLUDEPATH += $$PWD/../Item2
LIBS += D:/Code/build/Item2/debug/item2.lib
注:LIBS 我是直接在構(gòu)建 Item2 之后,拿到的 item2.lib 的路徑,這是絕對路徑,建議用相對路徑
相對路徑:
CONFIG(debug, debug | release){
DESTDIR += $${PWD}/../Runs/debug #DESTDIR 目標(biāo)程序生成目錄
LIBS += $${PWD}/../Runs/debug/Item2.lib #libs 庫生成目錄
}else{
DESTDIR += $${PWD}/../Runs/release #DESTDIR 目標(biāo)程序生成目錄
LIBS += $${PWD}/../Runs/release/Item2.lib
}
7、編輯 TotalProject.pro 文件
CONFIG += ordered
SUBDIRS += \
Item2 \
Item1
三、驗(yàn)證
方式:item1 上去調(diào)用 item2 的方法 maxValue
1、cpp 實(shí)現(xiàn) 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”,并調(diào)用 maxValue 方法
Item_two v;
int value = v.maxValue(10, 15);
qDebug() << value;
3、構(gòu)建 -> 運(yùn)行
此時(shí)應(yīng)該是報(bào)錯(cuò)的
錯(cuò)誤1:無法解析外部符號,未找到文件 Item1.obj 或者 ***.obj
解決方法:文章第二節(jié)《項(xiàng)目關(guān)聯(lián)》中第6小節(jié),設(shè)置LIBS。(應(yīng)該是LIB路徑不對)
錯(cuò)誤2:由于找不到Item2.dll,無法繼續(xù)執(zhí)行代碼
解決方法:去項(xiàng)目build路徑下,在Item2文件中的Item2.dll,將該文件復(fù)制到 Item1 文件夾中debug文件里面
上述兩個(gè)問題解決之后,基本上就可以運(yùn)行成功了。文章來源:http://www.zghlxwxcb.cn/news/detail-417104.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-417104.html
到了這里,關(guān)于Qt 項(xiàng)目A調(diào)用項(xiàng)目B方法(項(xiàng)目架構(gòu)管理)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!