我在获取从基类继承的所有类的类名时遇到问题。
Class Base
{
};
Class A:public Base
{
};
Class B:public Base
{
};
Class C:public Base
{
};
.....等等。我的要求是我想知道从类Base
继承的所有类名。基类中有什么方法或方法可以让我知道所有的类吗?提前谢谢。
答案 0 :(得分:2)
Qt允许这样做有以下限制:
QObject
。有关QObject
派生类的元信息存储在QMetaObject
中,可通过T::staticMetaObject
访问。首先,您希望获得应用程序中所有元对象的列表。你可以使用这样的东西:
QList<const QMetaObject*> global_list;
template<class T> register_class() {
global_list << &T::staticMetaObject;
}
//execute the following at program initialization
register_class<Base>();
register_class<A>();
register_class<B>();
register_class<C>();
要获取从Base派生的类名列表,您需要:
const QMetaObject*
为&amp; Base :: staticMetaObject。QMetaObject::superClass
是否返回目标元对象。如果还应检测到间接继承,则可能需要执行递归检查。QMetaObject::className
获取已找到子类的名称。