我需要获取QMetaObject来动态创建对象实例。如果我知道对象,那么QObject::metaObject()就是我需要的。如果我知道这个类,那么我可以使用QObject::staticMetaObject变量。但是,如果我只知道类名作为字符串值,我应该使用什么?
发布于 2011-06-07 08:48:52
您请求一个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会解决这个问题?使用风险自负。
发布于 2019-01-06 04:35:26
从Qt5开始,仅从类名获取QMetaObject就变得很简单:
int typeId = QMetaType::type("MyClassName");
const QMetaObject *metaObject = QMetaType::metaObjectForType(typeId);
if (metaObject) {
// ...
}另请参阅以下Qt5应用编程接口文档:
https://stackoverflow.com/questions/6259390
复制相似问题