Qt: Как получить все классы, которые являются детьми определенного класса

Система метаобъектов в Qt позволяет проводить много интересных самоанализов. Но моя проблема заключается в следующем: давайте предположим, что я закодировал class MyClass : public QObject, Я хочу иметь кнопку в моем графическом интерфейсе для создания экземпляра MyClass, Но я решил создать MySubClass : public MyClass и я создаю еще одну кнопку, чтобы создать экземпляр MySubClass,

Теперь коллега также создает свой собственный подкласс. Есть ли способ автоматически узнать все классы, которые расширяют MyClass (и автоматически добавить соответствующую кнопку)?

Я вижу некоторые обходные пути, такие как наличие массива MetaObject так что я могу позвонить QMetaObject::newInstance() на каждом из них, но это требует от меня добавления подкласса вручную каждый раз, когда новый подкласс добавляется в кодовую базу.

Есть ли автоматический способ сделать это? При необходимости я могу ограничиться классами, которые реализуют определенные Q_INTERFACE если это имеет какое-либо значение.

0

Решение

Нет, нет автоматического способа сделать это, потому что классы нигде не зарегистрированы — 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 занятия по первому использованию как минимум.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]