Qt:如何获取特定类的子类的所有类

时间:2017-02-03 15:59:09

标签: c++ qt introspection moc

Qt的元对象系统允许很多有趣的内省。但我的问题如下:假设我编写了一个class MyClass : public QObject。我希望在GUI中有一个按钮来创建MyClass的实例。但我决定创建MySubClass : public MyClass并创建另一个按钮来创建MySubClass的实例。

现在一位同事也创建了自己的子类。有没有办法自动找出所有扩展MyClass的类(并自动添加相关按钮)?

我可以看到一些解决方法,比如拥有一个MetaObject数组,这样我就可以在每个数组上调用QMetaObject::newInstance(),但是每次将新子类添加到子类时,它都需要我手动添加子类。代码库。

有自动方式吗?如果需要,我可以将自己限制在实现特定Q_INTERFACE的类中,如果它有任何区别的话。

1 个答案:

答案 0 :(得分:1)

不,没有自动的方法,因为这些类没有在任何地方注册 - Q_OBJECT宏只将成员直接添加到类中但没有注册该类。< / p>

您可以做的是添加一个项目范围的定义,修改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类。