2011-06-07 60 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