Hi,

I think the solution may involve keeping forward-declarations but adding 
visibility to the "other" types in moc generated code by using Q_MOC_INCLUDE in 
A to include B and vice versa. Does that make sense?


Simon
________________________________
From: Development <[email protected]> on behalf of Mike Krus 
via Development <[email protected]>
Sent: Monday, April 27, 2020 11:52
To: Qt Development Group <[email protected]>
Subject: [Development] Circular dependencies for Q_PROPERTY

Hi

I have 2 classes, A and B, derived from QObject, each have a property
of type pointer-to-other-class. So

class A : public QObject {
Q_PROPERTY(B *foo …)
…
};

And:

class B : public QObject {
Q_PROPERTY(A *foo …)
…
};

Because of the circular dependency, I can’t #include the full class
definition, just do forward declaration.

Now this fails in Qt 6, seems the moc generated code needs the
full class declaration.

Looking at generated moc code, looks like creating the meta object
requires a qt_metaTypeArray<A*, bool> which checks that A derives
from QObject by calling  IsPointerToTypeDerivedFromQObject
which uses sizeof() which requires the full type.

Any way around this? Seems like a rather big regression compared
to Qt 5…


Mike

—
Mike Krus | [email protected] | Senior Software Engineer
KDAB (UK) Ltd., a KDAB Group company
Tel: UK Office +44 1625 809908   Mobile +44 7833 491941
KDAB - The Qt Experts, C++, OpenGL Experts


_______________________________________________
Development mailing list
[email protected]
https://lists.qt-project.org/listinfo/development

Reply via email to