Qt:如何获取属于特定 class 的所有 classes
Qt : How to get all the classes that are children of a specific class
Qt 的元对象系统允许很多有趣的内省。但我的问题如下:假设我编码了 class MyClass : public QObject
。我想在我的 GUI 中有一个按钮来创建 MyClass
的实例。但我决定创建 MySubClass : public MyClass
并创建另一个按钮来创建 MySubClass
.
的实例
现在同事也创建了自己的子类。有没有办法自动找出扩展 MyClass
的所有 类(并自动添加相关按钮)?
我可以看到一些解决方法,比如有一个 MetaObject
的数组,这样我就可以在每个数组上调用 QMetaObject::newInstance()
,但是它需要我在每次添加新的子类时手动添加子类到代码库。
有自动完成的方法吗?如果需要,我可以将自己限制在 类 实现特定的 Q_INTERFACE
,如果它有任何不同的话。
不,没有自动的方法来做到这一点,因为 classes 没有在任何地方注册 - Q_OBJECT
宏只会直接向 class 添加成员,但不会注册 class.
你可以做的是添加一个 project-wide 定义修改 Q_OBJECT
以通过成员添加工厂注册,例如:
// this declaration added to `Q_OBJECT`:
Factory::Registration q_obj_reg{this};
鉴于:
class Factory {
public:
class Registration {
public:
template <typename T> Registration(T*);
...
};
};
这将至少在首次使用时自动注册所有 QObject
classes。
Qt 的元对象系统允许很多有趣的内省。但我的问题如下:假设我编码了 class MyClass : public QObject
。我想在我的 GUI 中有一个按钮来创建 MyClass
的实例。但我决定创建 MySubClass : public MyClass
并创建另一个按钮来创建 MySubClass
.
现在同事也创建了自己的子类。有没有办法自动找出扩展 MyClass
的所有 类(并自动添加相关按钮)?
我可以看到一些解决方法,比如有一个 MetaObject
的数组,这样我就可以在每个数组上调用 QMetaObject::newInstance()
,但是它需要我在每次添加新的子类时手动添加子类到代码库。
有自动完成的方法吗?如果需要,我可以将自己限制在 类 实现特定的 Q_INTERFACE
,如果它有任何不同的话。
不,没有自动的方法来做到这一点,因为 classes 没有在任何地方注册 - Q_OBJECT
宏只会直接向 class 添加成员,但不会注册 class.
你可以做的是添加一个 project-wide 定义修改 Q_OBJECT
以通过成员添加工厂注册,例如:
// this declaration added to `Q_OBJECT`:
Factory::Registration q_obj_reg{this};
鉴于:
class Factory {
public:
class Registration {
public:
template <typename T> Registration(T*);
...
};
};
这将至少在首次使用时自动注册所有 QObject
classes。