在Qt中解析方法的元数据时检测方法的起源

时间:2016-01-21 00:28:08

标签: c++ qt oop metadata

我有代码解析我编写的Qt插件的元数据,该插件通过其接口公开了一些功能。我的插件的主类继承自QObject,因此当我读取元数据时,我还获得了在QObject中声明和公开的方法,其中包括:

destroyed(Object *);
objectNameChanged(QString);
etc...

我想解析我的插件主类中引入的方法,而不是从QObject继承的方法,但是看看QMetaMethod提供的属性,我没有看到办法。我只能访问QMetaObject中包含QObject方法的所有方法。

解决这个问题的一种方法是解析QObject的元数据,从我的插件的主类中排除它的方法。这是我的最后一招。我想知道Qt是否能提供开箱即用的东西。

1 个答案:

答案 0 :(得分:1)

您可以使用QMetaObject::methodOffset()方法获取当前类'方法开始的索引,然后从那里迭代而不是从索引0开始:

const QMetaObject *object = metaObject();

// Gets only methods on the actual class.
for (int i = object->methodOffset(); i < object->methodCount(); ++i) {
    qDebug() << object->method(i).methodSignature();
}

// Gets all methods, including super classes.
for (int i = 0; i < object->methodCount(); ++i) {
    qDebug() << object->method(i).methodSignature();
}

这是有效的,因为方法编号是有序的,所以所有超类/父类方法都在子类方法之前。因此,如果从子类方法开始的偏移处开始,则将跳过所有超类方法。

相关问题