如何把乙個Qt專案拆成多個Qt子專案

2021-07-31 05:18:01 字數 3339 閱讀 5901

title:   如何把乙個qt專案拆成多個qt子專案

author: kagula

date: 2017-04-27

環境:qt 5.6, qt creator 3.6.1

前言當qt專案在開發過程中變的很大時,需要把它拆成乙個exe和多個dll lib子專案。

本文介紹了如何實現這個目的的演示。

正文

本文的示例有四個專案組成:

aaa_lib子專案生成靜態lib檔案,假設從主專案中拿出來的部份**放在這裡。

aaa_dll子專案生成動態dll檔案,假設從主專案中拿出來的部份**放在這裡。

aaa         主專案生成exe檔案,假設它是原來就存在的專案

main父專案什麼都不生成,僅僅起到組織子專案的作用

aaa_dll子專案

在qt creator中新建共享庫專案,路徑指定aaa主專案所在路徑,假設把從主專案中抽出來的**放在這裡。

修改aaa_dll.pro檔案,重定向dll的輸出路徑

aaa_dll.pro檔案完整內容如下

qt       -= gui

target = aaa_dll

template = lib

#不要直接開啟自己的pro檔案編譯,否則build路徑是基於自己的相對路徑,而不是基於parent專案的build相對路徑

#一定要確保從parent專案build當前專案。

#這裡設定最終生成的檔案(比如說exe dll lib)存放到**

config(debug, debug|release) else

defines += aaa_dll_library

sources += aaa_dll.cpp

headers += aaa_dll.h\

aaa_dll_global.h

unix

修改aaa_dll.h檔案,讓裡面的class增加個add方法用來做測試  

#ifndef aaa_dll_h

#define aaa_dll_h

#include "aaa_dll_global.h"

class aaa_dllshared_export aaa_dll

;#endif // aaa_dll_h

aaa_dll.cpp檔案中的對新增方法的實現**,這裡省畧。

aaa_lib子專案

在qt creator中新建靜態庫專案,路徑指定為aaa主專案所在路徑

參考aaa_dll子專案修改pro檔案,指定

lib的輸出路徑。 

修改aaa_lib.h檔案,讓裡面的class增加個方法用來做測試  

參考aaa_dll子專案的內容,都一樣的,這裡omit。

aaa主專案

修改aaa.pro檔案,把需要鏈結哪些庫新增進去,這裡是「aaa_lib」、「aaa_dll」,修改後的內容如下:

qt       += core gui

greaterthan(qt_major_version, 4): qt += widgets

target = aaa

#這裡的相對路徑都是基於build路徑的

config(debug, debug|release) else

sources += main.cpp\

mainwindow.cpp

headers += mainwindow.h

forms += mainwindow.ui

main 專案在 aaa 主專案的目錄 中新建main.pro檔案,和aaa.pro檔案同目錄

下面是main.pro檔案的清 單,以後開啟工程不再從aaa.pro中開啟,而是改為從main.pro中開啟

template = subdirs

subdirs += \

aaa_dll/aaa_dll.pro \

aaa_lib/aaa_lib.pro \

aaa.pro

config += ordered

main專案的功能就兩個[1]有哪些子專案[2] 這些子專案之間的依賴順序

現在用qt creator直接開啟main.pro檔案

下面是qtcreator中的截圖

如果你上面的pro檔案修改的正確,就能看到像上圖一樣,你的專案中已經有了三個子專案結點

在aaa主專案中引用aaa_dll子專案

包含標頭檔案

#include "aaa_lib/aaa_lib.h"

#include "aaa_dll/aaa_dll.h"

然後直接使用標頭檔案中宣告的class即可

拆分現有qt專案後的效果

在aaa_dll子專案中修改**後執行,qt creator就不需重新編譯exe專案,僅編譯dll子專案,然後ide自動執行程式,看到修改後的結果。

還可以直接從主project中debug進子專案,我們的目的達到。

重新的事情再說一遍

[1]變成子專案後,千萬不要再直接開啟子專案編譯,因為編譯後產生的檔案(dll或lib)存放路徑不一樣,

由於qt creator預設可以同時開啟多個專案,你一定要把已經變成子專案的專案close掉,以後做到只從main專案中訪問子專案,

免得子專案的**修改了,一執行還是老樣子。

將乙個dataTable拆成多個

最近遇到乙個問題害我鬱悶了很久,在乙個頁面裡分類顯示資料,每乙個大類裡的資料是動態取得。打算將它分三列顯示,希望得到的效果 顯示成了 aa cceeaaccee aaacceeaaccee aaacceeaaccee bbbcceeccee bbbcceeccee bbbddeeee bbbddff...

QT學習 如何分析乙個QT類

出處 我們以qlineedit這個類為例來看看如何學習分析乙個qt類。1.public types 這是乙個在這個類中可以供我們使用的公共列舉型別。這也就是說,我們可以如下使用這個公共型別 some code qlineedit echomode mode mode mylineedit echom...

QT學習 如何分析乙個QT類

出處 我們以qlineedit這個類為例來看看如何學習分析乙個qt類。1.public types 這是乙個在這個類中可以供我們使用的公共列舉型別。這也就是說,我們可以如下使用這個公共型別 some code qlineedit echomode mode mode mylineedit echom...