五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Qt Creator 源碼學(xué)習(xí)筆記02,認(rèn)識(shí)框架結(jié)構(gòu)結(jié)構(gòu)

2022-03-21 21:42 作者:devstone  | 我要投稿


閱讀本文大概需要 8?分鐘

在上一篇大概了解了關(guān)于Qt Creator 基礎(chǔ)知識(shí)后^1,本篇先學(xué)習(xí)下框架基本結(jié)構(gòu),這樣能夠清晰的知道這個(gè)框架當(dāng)中包含那些文件、文件夾、工程文件,這些文件分別代表什么意思以及有什么作用

文件結(jié)構(gòu)

打開(kāi)下載好的源碼,如下目錄所示

圖片

可以看出來(lái),文件和文件夾很多,不要被這些表面嚇著,我們真正需要關(guān)心的沒(méi)有幾個(gè),需要重點(diǎn)關(guān)注的我加粗的文件和文件夾就可以了

  • bin文件夾

  • dist 文件夾

  • doc 文件夾

  • qbs 文件夾

  • scripts 文件夾

  • share 文件夾

  • src 文件夾

  • tests 文件夾

  • docs.pri

  • qtcreator.pri

  • qtcreator.pro

  • qtcreator.qbs

  • qtcreatordata.pri

  • README.md

這里我們主要要關(guān)注src文件夾,這個(gè)下面是這個(gè)框架的源碼,其它的文件夾先不看

qtcreator.pri文件是項(xiàng)目工程中的一些通用配置,比如版本號(hào),一些庫(kù)的輸出路徑定義,每個(gè)插件或者子工程都會(huì)包含該配置文件,方便直接配置工程一些變量(具體怎么配置,后面會(huì)講解到)

qtcreator.pro文件是主工程文件,要打開(kāi)編譯源碼也是需要打開(kāi)該工程文件進(jìn)行加載的

PS: 涉及到 qbs 相關(guān)內(nèi)容可以不用關(guān)注了,Qt Build Suite 也是一種跨平臺(tái)的編譯工具,目前使用較少無(wú)需關(guān)注,重點(diǎn)了解學(xué)習(xí) qmake

框架結(jié)構(gòu)

下面來(lái)詳細(xì)看下工程結(jié)構(gòu)是如何管理的,以及整個(gè)框架原理

圖片

使用 Qt Creator 打開(kāi)工程后你會(huì)發(fā)現(xiàn)有很多子工程項(xiàng)目,一堆工程文件出現(xiàn)在你面前,這個(gè)時(shí)候不要亂、不要怕,我們目前只需要關(guān)心三個(gè)部分就可以了

  • libs

  • plugins

  • app

libs部分

libs工程下面包含了常用的一些通用方法,我們目前關(guān)注三個(gè)即可

Aggregation工程

這個(gè)類提供了「打包」功能,可以將很多組件打包成一個(gè)整體,整個(gè)理解起來(lái)有點(diǎn)抽象,你可以理解為將多個(gè)對(duì)象封裝成一個(gè)對(duì)象,這個(gè)對(duì)象對(duì)外提供了所有對(duì)象的接口屬性和方法

  • Aggregation 集合內(nèi)部每個(gè)組件對(duì)象都可以互相轉(zhuǎn)化

  • Aggregation 集合內(nèi)每個(gè)對(duì)象的生命周期被綁定在了一起,即一個(gè)在全部在,一個(gè)被刪除析構(gòu)那么其余的組件也就會(huì)被析構(gòu)

extensionsystem工程

這個(gè)類實(shí)現(xiàn)了插件的管理功能,是整個(gè)框架的核心部分,所有的插件生命周期管理都在這個(gè)類里面實(shí)現(xiàn)

  • IPlugin 插件基類,后面所有的插件都是繼承自它來(lái)實(shí)現(xiàn)所有功能的,有三個(gè)重點(diǎn)方法需要關(guān)注

插件的初始化,外部依賴初始化,延遲初始化,這三個(gè)虛函數(shù)用來(lái)初始化每個(gè)插件各自的一些資源信息。外部依賴那個(gè)也尤為重要,比如我們某個(gè)插件同時(shí)依賴多個(gè)其它插件,那么就需要在這里處理等待其它插件加載完成才算完成

  • PluginManager 插件管理單例類,整個(gè)框架只有一份,負(fù)責(zé)框架插件的管理,隨著程序退出它的聲明周期才結(jié)束

  • PluginManagerPrivate 插件管理具體實(shí)現(xiàn)邏輯類,看名字就很清楚,典型的P-D指針關(guān)系,這樣是為了把插件系統(tǒng)擴(kuò)展的具體實(shí)現(xiàn)隱藏不給外部暴露,這種技巧在后面很多代碼中經(jīng)常會(huì)見(jiàn)到,也是值得我們?nèi)W(xué)習(xí)

  • PluginSpec 插件核心類,該類實(shí)現(xiàn)插件的所有屬性

每個(gè)插件(每個(gè)動(dòng)態(tài)庫(kù))都有一份該對(duì)象,用來(lái)記錄該插件的所有屬性信息,這些屬性信息是通過(guò) json?配置文件讀入的,這些信息被稱為插件的「元信息」,詳細(xì)內(nèi)容后面關(guān)注插件實(shí)現(xiàn)會(huì)提到

utils 工程

這個(gè)工程里面封裝了一些基礎(chǔ)功能算法類,比如文件操作、數(shù)據(jù)排序操作、json交互操作、字符串操作集合等,還有一些基礎(chǔ)控件封裝實(shí)現(xiàn)也在這個(gè)里面,比多t ree 結(jié)構(gòu),tab 表格結(jié)構(gòu),自定義按鈕、對(duì)話框等等,想要學(xué)習(xí)的可以看這里了,有很多東西值得借鑒

比如后面要提到的核心插件主窗口QMainWindow類,基類就在在這里

這里主要是一些事件變化后通知外部處理,比如這里如果主題發(fā)生改變發(fā)送對(duì)應(yīng)信號(hào)出去,設(shè)備發(fā)生改變(插拔光驅(qū)等)發(fā)出一個(gè)設(shè)備改變事件到 Qt 事件隊(duì)列去處理

plugin 部分

這部分是每個(gè)插件實(shí)現(xiàn)部分,重點(diǎn)需要關(guān)注核心插件corePlugin的實(shí)現(xiàn),其它插件都是要依賴核心插件來(lái)實(shí)現(xiàn)業(yè)務(wù)功能

圖片

在這個(gè)插件里面主要初始化了主窗口、菜單管理類實(shí)例以及一些模式管理對(duì)象初始化

后面我們會(huì)看到各種各樣的插件,比如你打開(kāi)Qt Creator的時(shí)候首頁(yè)顯示的內(nèi)容,也是單獨(dú)的一個(gè)插件,名字叫做weilcome

每個(gè)插件都有一個(gè)標(biāo)識(shí)ID,用來(lái)區(qū)分是你自己寫的插件,防止別人惡意修改插件

每個(gè)插件還有一個(gè)對(duì)應(yīng)的元數(shù)據(jù)描述配置文件,這個(gè)文件配置了該插件的一些基本信息,比如插件名字、版本、所有權(quán)、依賴那些插件等,這些配置信息在編譯時(shí)會(huì)寫進(jìn)該插件動(dòng)態(tài)庫(kù)當(dāng)中,采用的是Qt的元對(duì)象技術(shù)來(lái)實(shí)現(xiàn)的,這樣在插件加載運(yùn)行時(shí)就能通過(guò)反射動(dòng)態(tài)獲取這些信息,繼而用來(lái)進(jìn)行一些插件之間加載關(guān)系的驗(yàn)證

一個(gè)簡(jiǎn)單的配置描述如下所示

其中很關(guān)鍵的是一些變量值,比如$$QTCREATOR_VERSION,通過(guò)這個(gè)變量直接可以讀取到我們?cè)诠こ?code>qtcreator.pri中定義的變量值,繼而快速統(tǒng)一加載顯示,其它變量值獲取類似

其次,需要關(guān)注的是每個(gè)插件的配置依賴文件比如welcome_dependencies.pri,該文件中包含了依賴那些庫(kù)那些插件

某個(gè)插進(jìn)依賴那些插件和動(dòng)態(tài)庫(kù),只需要在對(duì)應(yīng)位置追加其名字即可,工程配置文件會(huì)自動(dòng)進(jìn)行加載,這樣編寫可以減少很多重復(fù)工作,而且插件依賴關(guān)系也很清楚的看到

關(guān)于這些依賴怎么實(shí)現(xiàn)自動(dòng)加載的,后面會(huì)用單獨(dú)的篇幅來(lái)詳細(xì)介紹,這樣我們學(xué)會(huì)后就可以直接在我們項(xiàng)目中直接使用了

app 部分

這個(gè)部分是程序入口實(shí)現(xiàn)部分,這里主要是獲取插件路徑,初始化插件、配置文件,加載每個(gè)插件,如果都沒(méi)有錯(cuò)誤,那么初始化完成后主界面就會(huì)顯示出來(lái),直接看主函數(shù)入口看就行

關(guān)鍵部分是插件管理器的初始化,設(shè)置插件搜索路徑后對(duì)每個(gè)插件進(jìn)行初始化操作

在這里還有一個(gè)需要注意的地方,就是這個(gè)文件app_version.h.in

這個(gè)是一個(gè)模板文件,qmake加載執(zhí)行完畢后,會(huì)在臨時(shí)目錄下生成對(duì)應(yīng)的頭文件app_version.h

這個(gè)模板文件定義了一些常量,某些變量值引用的是宏定義,最后編譯后宏定義會(huì)被替換掉真正的值,在我們代碼中引入時(shí)真正起作用,更加詳細(xì)使用過(guò)程后面統(tǒng)一分析pro文件技巧時(shí)會(huì)提到

總結(jié)

學(xué)習(xí)到這里,已經(jīng)大概清楚了Qt Creator框架的基本結(jié)構(gòu)了,首先是一些基本庫(kù),這些動(dòng)態(tài)庫(kù)封裝了一些基本功能和用法,方便在多個(gè)模塊重復(fù)調(diào)用使用,其次是插件管理系統(tǒng)的實(shí)現(xiàn),主要包含插件對(duì)象聲明周期管理,插件加載、插件卸載、插件直接依賴關(guān)系處理

比如有插件A、B、C,C插件現(xiàn)在同時(shí)依賴于插件A和B,那么在加載時(shí)就需要特殊考慮

最后就是多個(gè)插件的初始化,主窗口和菜單組件管理類,方便拓展到其它插件進(jìn)行訪問(wèn)管理

整個(gè)QTC插件系統(tǒng)是由一個(gè)個(gè)動(dòng)態(tài)庫(kù)構(gòu)成的,每個(gè)插件互相配合實(shí)現(xiàn)了這樣一個(gè)復(fù)雜的跨平臺(tái)的IDE,仔細(xì)研究下就可以發(fā)現(xiàn)很多奇妙的用法和知識(shí).

好了,關(guān)于工程結(jié)構(gòu)暫時(shí)就介紹這么多,后面學(xué)習(xí)每個(gè)部分內(nèi)容時(shí)會(huì)進(jìn)行更詳細(xì)的介紹


? ? ? ? ? ? ?



Qt Creator 源碼學(xué)習(xí)筆記02,認(rèn)識(shí)框架結(jié)構(gòu)結(jié)構(gòu)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
临澧县| 梅州市| 宜兴市| 柳州市| 盐城市| 横峰县| 五指山市| 客服| 淮南市| 苍梧县| 景德镇市| 诸城市| 云阳县| 高淳县| 峨眉山市| 济阳县| 吉水县| 阳新县| 昆山市| 进贤县| 金门县| 东平县| 琼中| 平舆县| 晋州市| 扎赉特旗| 大英县| 五大连池市| 武宁县| 新干县| 香格里拉县| 尉氏县| 蓝田县| 浦城县| 虹口区| 收藏| 永修县| 盱眙县| 九台市| 正阳县| 安吉县|