gpt4 book ai didi

c++ - Qt : How to get all the classes that are children of a specific class

转载 作者:行者123 更新时间:2023-11-30 05:17:51 25 4
gpt4 key购买 nike

Qt 的元对象系统允许进行大量有趣的内省(introspection)。但我的问题如下:假设我编写了一个 class MyClass : public QObject。我想在我的 GUI 中有一个按钮来创建 MyClass 的实例。但我决定创建 MySubClass : public MyClass 并创建另一个按钮来创建 MySubClass 的实例。

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

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

有自动的方法吗?如果需要,我可以限制自己使用实现特定 Q_INTERFACE 的类,如果它有任何不同的话。

最佳答案

不,没有自动的方法来做到这一点,因为类没有在任何地方注册 - Q_OBJECT 宏只将成员直接添加到类,但不注册类。

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

关于c++ - Qt : How to get all the classes that are children of a specific class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42028204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com