C++ Qt:如何获取作为特定类的子类的所有类
Qt的元对象系统允许许多有趣的自省。但我的问题是:假设我编写了一个C++ Qt:如何获取作为特定类的子类的所有类,c++,qt,introspection,moc,C++,Qt,Introspection,Moc,Qt的元对象系统允许许多有趣的自省。但我的问题是:假设我编写了一个类MyClass:publicqobject。我想在GUI中有一个按钮来创建MyClass的实例。但是我决定创建MySubClass:publicmyclass,并创建另一个按钮来创建MySubClass的实例 现在,一位同事还创建了自己的子类。是否有一种方法可以自动查找扩展了MyClass的所有类(并自动添加相关按钮) 我可以看到一些解决方法,比如拥有一个元对象数组,这样我就可以对它们中的每一个调用QMetaObject::ne
类MyClass:publicqobject
。我想在GUI中有一个按钮来创建MyClass
的实例。但是我决定创建MySubClass:publicmyclass
,并创建另一个按钮来创建MySubClass
的实例
现在,一位同事还创建了自己的子类。是否有一种方法可以自动查找扩展了MyClass
的所有类(并自动添加相关按钮)
我可以看到一些解决方法,比如拥有一个元对象数组
,这样我就可以对它们中的每一个调用QMetaObject::newInstance()
,但它需要我在每次向代码库添加新子类时手动添加子类
有没有一种自动的方法?如果需要的话,我可以将自己限制在实现特定
Q_接口的类上,如果这样做有任何区别的话。不,没有自动的方法,因为类没有在任何地方注册-一个Q_对象
宏只会直接将成员添加到类中,而不会注册类
您可以添加一个项目范围的定义,修改Q_对象
,通过成员添加工厂注册,例如:
// this declaration added to `Q_OBJECT`:
Factory::Registration q_obj_reg{this};
鉴于:
class Factory {
public:
class Registration {
public:
template <typename T> Registration(T*);
...
};
类工厂{
公众:
班级注册{
公众:
模板注册(T*);
...
};
})
这将至少在第一次使用时自动注册所有QObject
类。我问这个问题是因为我知道我可以在Java中完成,我即将被说服,但是没有注册的情况下QMetaObject::newInstance()如何工作呢?我发现确实没有魔法,这就是为什么我必须使用qRegisterMetaType()。所以你确实是对的,我相信