如何仅从类名中获取 QMetaObject?

Ser*_*kov 5 c++ qt

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

Den*_*ose 4

您要求 a 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);
Run Code Online (Sandbox Code Playgroud)

粗略浏览一下文档并不清楚内存是如何p分配的,但我认为destroy可以解决这个问题?使用风险自负。

  • 我认为这行不通。对于作为 QMetaType 工作的东西,它需要一个公共复制构造函数,而 QObject 明确不允许使用这些构造函数。 (4认同)