Qt通過類名建立類例項

2021-10-04 18:00:32 字數 840 閱讀 1991

qobject的子類都有乙個staticmetaobject靜態成員變數,可通過staticmetaobject.newinstance()來建立這個類的例項。如果我們用qmap將類名和這個類的staticmetaobject成員變數對映起來,就可以實現通過類名建立類物件:

class

dialog

//繼承於qdialog的介面類

qmap map;

map[

"dialog"

]=dialog::staticmetaobject;

qwidget*w=

(qwidget*

)map[

"dialog"].

newinstance()

;

使用這個方法有三點需要注意:

1、繼承qobject或其子類

2、使用q_object巨集

3、建構函式前需要加上q_involkable

如果建構函式帶有引數的話,可以使用q_arg()傳入引數

假設有建構函式 dialog(qstring str);

建立時可這樣用:

qstring str=

"要傳入的引數";

dialog::staticmetaobject.

newinstance

(q_arg

(qstring,str)

);

newinstance()可以同時使用多個q_arg(),詳細資訊可參考qt幫助文件

C 反射 通過類名建立類例項

反射 其實就是利用程式集的元資料資訊。反射可以有很多方法,編寫程式時請先導入 system.reflection 命名空間。2 若要反射當前專案中的類 即當前專案已經引用它了 可以為 3 也可以為 參考 反射幫助類 public static class reflectionhelper 建立物件例...

C 根據類名建立類的例項物件

因為我使用這個方法的類都是和abstractscenepagedto處於乙個命名空間以及程式集下的,所以獲取命名空間和程式集的時候,直接使用abstractscenepagedto這個類進行獲取,這樣更準確一些,也不怕專案遷移改名。1 private t createactivityscenepag...

Qt程式設計 通過反射機制實現類名資訊動態建立物件技術

根據類名資訊動態建立物件技術,不僅可以降低 的耦合度和複雜性,還可以實現指令碼化程式設計技術,動態解析建立物件,提高記憶體利用率和應用程式靈活性。反射機制框架如下 reflect類宣告如下 typedef qwidget constructor qwidget parent class reflec...