Qt MetaProperty и циклические зависимости - PullRequest
0 голосов
/ 06 мая 2020

У меня есть два класса qt, которые я собираюсь использовать в шаблонах, использующих библиотеку Grantlee, проблема в том, что два класса используют друг друга, как в приведенном ниже коде, который работал до сих пор с использованием grantlee, если вы не знакомы с grantlee, просто заполните шаблон из объектов qt, таких как Django, jinja

//file a.h
class B;
Q_DECLARE_METATYPE(QList<B*>)
class A : public QOBject{
QOBJECT
    Q_PROPERTY(QList<B*> bList...)

};

// file b.h
class A;
class B : public QOBject{
QOBJECT
    Q_PROPERTY(A* a...)

};

, основная проблема заключается в том, что для правильного использования 'a' и 'bList' в grantLee классы A и B должны быть полностью объявлены, поэтому я получаю эту ошибку QMetaProperty :: read: Невозможно обработать незарегистрированный тип данных 'QList' для свойства 'A :: bList'

Я пробовал использовать Q_DECLARE_METATYPE (QList) и то же самое для 'a', но Q_DECLARE_METATYPE требует, чтобы класс был полностью описан, поэтому я попытался с Q_DECLARE_OPAQUE_POINTER (B), я получил эту ошибку grantlee.customtype: Не знаю, как обрабатывать метатип B

есть ли способ go вокруг этой круговой зависимости + проблема свойств qt? или изменение архитектуры обязательно

...