我需要获取QMetaObject来动态创建对象实例。 如果我知道对象,那么QObject :: metaObject()就是我需要的。如果我知道该类,那么我可以使用QObject :: staticMetaObject变量。但是如果我只知道类名作为字符串值,我该怎么用?
答案 0 :(得分: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
负责这个?使用风险自负。
答案 1 :(得分:1)
从Qt5开始,仅从类名获取QMetaObject就变得很简单:
int typeId = QMetaType::type("MyClassName");
const QMetaObject *metaObject = QMetaType::metaObjectForType(typeId);
if (metaObject) {
// ...
}
另请参阅以下Qt5 API文档: