我有代码解析我编写的Qt插件的元数据,该插件通过其接口公开了一些功能。我的插件的主类继承自QObject,因此当我读取元数据时,我还获得了在QObject中声明和公开的方法,其中包括:
destroyed(Object *);
objectNameChanged(QString);
etc...
我想解析我的插件主类中引入的方法,而不是从QObject继承的方法,但是看看QMetaMethod提供的属性,我没有看到办法。我只能访问QMetaObject中包含QObject方法的所有方法。
解决这个问题的一种方法是解析QObject的元数据,从我的插件的主类中排除它的方法。这是我的最后一招。我想知道Qt是否能提供开箱即用的东西。
答案 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();
}
这是有效的,因为方法编号是有序的,所以所有超类/父类方法都在子类方法之前。因此,如果从子类方法开始的偏移处开始,则将跳过所有超类方法。