QT元物件系統

2021-10-08 15:34:19 字數 2047 閱讀 1647

物件間的訊號和槽機制。

執行時型別資訊和動態屬性系統。

必須繼承自qobject

在類宣告區域新增q_object巨集。用於啟動原物件特性。

元物件編譯器(moc)為每個qobject的子類,提供實現元物件特性所必須的**。

反射機制指的是在執行時,能獲取任意乙個物件的所有型別、屬性和成員函式等資訊的一種機制。

qt中使用一系列類來實現反射機制。其中qmetaobject類描述了qobject及其派生類的所有元資訊。因此qmetaobject類的物件是qt中的元物件。

比如成員函式使用qmetamethod進行描述。

qmetamethod  qm = metaobject->method(1); //獲取索引為 1 的成員函式

需要繼承自qobject 並且在類中加入q_object巨集

如果希望普通函式能夠被反射,需要在函式宣告之前新增qobject::q_invokable巨集

q_invokable a(){} //要想函式被反射,需要指定 q_invokable 巨集。

如果希望成員變數能夠被反射,需要使用q_property巨集定義

qmetamethon 類

函式功能

qbytearraymethodsignature() const;

返回函式簽名

methodtypemethodtype() const;

返回函式型別(訊號 槽 成員函式 建構函式)

qbytearrayname() const;

函式名稱

intparametercount() const ;

返回引數個數

qlistparameternames() const;

返回引數名稱列表

intparametertype(int index) const;

返回指定索引引數型別

qlistparametertypes() const;

返回引數型別列表

intreturntype() const;

返回值的型別

const char *typename() const;

返回值型別的名稱

accessaccess() const;

返回函式的訪問級別

qmetaobject類

函式功能

intindexofmethod(const char* f) const;

返回函式的索引

intindexofsignal(const char * s) const;

返回訊號的索引

intindexofconstructor(const char *c) const;

建構函式的索引

intconstructorcount() const ;

返回建構函式的數量

qmetamethodconstructor(int i)const;

返回指定建構函式的的元資料

intmethodcount() const;

返回函式的數量

qmetamethodmethod(int i) const;

返回指定索引i的元資料

const char*classname() const;

返回類的名稱

const qmetaobject*superclass() const;

返回父物件的元資料

Qt元物件系統

qmetaobject是負責元物件資訊的類,每個繼承自qobject的類都會有乙個qmetaobject物件,qobject物件共用該qmetaobject物件,給類提供遠多於c 預設的typeinfo提供的資訊。主要內容如下 1 類資訊 類 qmetaclassinfo q classinfo q...

Qt元物件系統

產生背景 qt的元物件系統為物件間的通訊提供了訊號槽機制 執行時型別資訊 動態屬性系統。核心內容 qt的元物件系統實現基於三方面 1.qobject基類。為能夠利用元物件系統的物件提供了乙個基類。2.q object巨集。用於實現元物件特性,如動態屬性 訊號槽。3.meta object compi...

Qt元物件系統

系統介紹 qt 元物件系統 meta object system qt的元物件系統基於如下三件事情 1.類 qobject,為所有需要利用元物件系統的物件提供了乙個基類。2.巨集 q object,通常可以宣告在類的私有段中,讓該類可以使用元物件的特性,比如動態屬性,訊號和槽。3.編譯器 元物件編譯...