首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何仅从类名获取QMetaObject?

如何仅从类名获取QMetaObject?
EN

Stack Overflow用户
提问于 2011-06-07 08:02:46
回答 2查看 3K关注 0票数 5

我需要获取QMetaObject来动态创建对象实例。如果我知道对象,那么QObject::metaObject()就是我需要的。如果我知道这个类,那么我可以使用QObject::staticMetaObject变量。但是,如果我只知道类名作为字符串值,我应该使用什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-07 08:48:52

您请求一个QMetaObject,但说它是用于创建目的。如果这就是您要做的全部工作,那么QMetaType可能就是您所需要的。你必须向它注册你的类型,但我非常确定QT没有默认的QMetaObject的主列表,所以无论你做什么,这样的注册都是必要的。

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2019-01-06 04:35:26

从Qt5开始,仅从类名获取QMetaObject就变得很简单:

代码语言:javascript
复制
int typeId = QMetaType::type("MyClassName");
const QMetaObject *metaObject = QMetaType::metaObjectForType(typeId);
if (metaObject) {
    // ...
}

另请参阅以下Qt5应用编程接口文档:

  • QMetaObject::type(const char*)
  • QMetaObject::metaObjectForType(int)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6259390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档