Qt動態屬性系統原始碼分析

2021-10-06 17:55:34 字數 1335 閱讀 1382

在標準c++中,為了保證封裝性,我們經常宣告乙個私有變數,然後宣告兩個公有函式,即set函式和get函式。在qt中我們可以使用巨集q_property()來實現這些。

乙個屬性可以使用常規函式qobject::property()和qobject::setproperty()進行讀寫,不用知道屬性所在類的任何細節,除了屬性的名字。

q_property()原型:

//屬性設定的標頭檔案.h

class

myproperity

:public qobject

;

在另外的乙個標頭檔案中新增槽方法用來響應發射的方法(相應maskchanged(qstring str

cpp新增標頭檔案:新增槽方法定義

main方法:

設定和讀取可以通過本物件,也可以通過父類指標:

①myp1->mask();//直接利用物件進行讀取資料

②myp1->setmask(「200000萬個口罩」);//直接利用物件指標進行改變

③obj->property(「mask」);//利用父類指標進行讀取

④obj->setproperty(「mask」,「3000000萬個口罩」);//利用父類指標進行改值,同樣會發射訊號

widget::

widget

(qwidget *parent)

:qwidget

(parent),ui

(new ui::widget)

執行結果:

總結:為了實現不同模組的開發,我們如果有這麼乙個動態屬性,就只要知道屬性的名稱就算不知道對應類的一些細節我們也同樣可以操作(進行改值和獲取值),會方便很多。

設定了的動態屬性會註冊到元物件系統中是針對與當前的例項,會新增到qobject中但是不會新增到qmetaobject中,不會實現共享(所以不同的例項有不同的結果mask1和mask2動態屬性物件的值不同)

QT 原始碼分析 1

編寫 qt 的時候,使用的語句是 include,對應的是qobject檔案,該檔案的位置可以在qt creator中用ctrl 滑鼠檢視,具體目錄為 5.10.1 mingw53 32 include qtcore,該檔案中只有一句話 include qobject.h qobject h的位置為...

Qt原始碼分析之QPointer

qpointer是乙個指標封裝類,其作用類似於智慧型指標,但是它最大的特點應該是在指標的控制上,它希望乙個qt的指標 當然是從qobject派生的 可以同時被多個類擁有,這在 介面程式設計中當然是很常見的事情了,但是當這個指標被刪除時,我們不希望再找到那兩個介面類然後通知它們,相反我們希望這兩個介面...

tokyo tyrant原始碼分析 日誌系統實現

enum enumeration for logging levels ttlogdebug,debug ttloginfo,information ttlogerror,error ttlogsystem system int g loglevel ttloginfo global,default...