2011-06-07 14 views
4

我需要獲取QMetaObject來動態創建對象實例。 如果我khow對象然後QObject :: metaObject()是我需要的。如果我知道這個類,那麼我可以使用QObject :: staticMetaObject變量。但是,如果我只知道類名作爲字符串值,我應該使用什麼?如何從類名獲得QMetaObject?

+0

調查QVariant的來源。我很確定它有一種方法,你可能會扭曲成你想要的。當然,它將依靠您向QVariant註冊您的類型。 – 2011-06-07 00:39:58

回答

3

你問QMetaObject,但說它是爲了創造的目的。如果這就是你所要做的,QMetaType可能就是你需要的。你必須用它註冊你的類型,但我很確定QT沒有一個QMetaObject的主列表,只是在默認情況下浮動,所以無論你做什麼,這樣的註冊都是必要的。

QMetaType::Type id = QMetaType::type("ClassName"); 
if(id == 0) 
    throw something_or_whatever; 
ClassName* p = (ClassName*)QMetaType::construct(id); 
//act on p 
QMetaType::destroy(id, p); 

在文件粗略地看一眼是不是對p內存是如何分配清楚,但我相信destroy需要這一服務?使用風險自負。

+3

我不認爲這會起作用。對於要作爲QMetaType工作的東西,它需要一個公共拷貝構造函數,並且這些對於QObject來說是明確的不允許的。 – Lendrick 2012-09-11 19:23:45