<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<style type="text/css" style="display:none;"> P {margin-top:0;margin-bottom:0;} </style>
</head>
<body dir="ltr">
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Hi,</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
the current solution in our repositories is to use the Q_MOC_INCLUDE(X) macro, which causes moc to write an #include X directive in the generated file. This avoids having to do the include in the header (which as you noticed isn't always possible).</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
We're aware of the issues, and there was some discussion around tooling, but I'm not aware of any outcomes so far.</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
Fabian</div>
<div>
<div style="font-family: Calibri, Arial, Helvetica, sans-serif; font-size: 12pt; color: rgb(0, 0, 0);">
<br>
</div>
<div id="Signature">
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<span>--<br>
</span></div>
<div style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:12pt; color:rgb(0,0,0)">
<div>Fabian Kosmale<br>
</div>
<div>Software Engineer</div>
<div><br>
</div>
<div>The Qt Company GmbH<br>
</div>
<div><span style="">Erich-Thilo-Str. 10</span></div>
<div><span style="">D-12489 Berlin</span><br>
</div>
<div>fabian.kosmale@qt.io<br>
</div>
<div>+49 1638686070<br>
</div>
<div>http://qt.io<br>
</div>
<div><br>
</div>
<div>Geschäftsführer: Mika Pälsi,<br>
</div>
<div>Juha Varelius, Mika Harjuaho<br>
</div>
<div>Sitz der Gesellschaft: Berlin,<br>
</div>
<div>Registergericht: Amtsgericht<br>
</div>
<div>Charlottenburg, HRB 144331 B<br>
</div>
<span>--</span><br>
</div>
</div>
</div>
<div id="appendonsend"></div>
<hr style="display:inline-block;width:98%" tabindex="-1">
<div id="divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" style="font-size:11pt" color="#000000"><b>Von:</b> Development <development-bounces@qt-project.org> im Auftrag von Mike Krus via Development <development@qt-project.org><br>
<b>Gesendet:</b> Montag, 27. April 2020 11:52<br>
<b>An:</b> Qt Development Group <development@qt-project.org><br>
<b>Betreff:</b> [Development] Circular dependencies for Q_PROPERTY</font>
<div> </div>
</div>
<div class="BodyFragment"><font size="2"><span style="font-size:11pt;">
<div class="PlainText">Hi<br>
<br>
I have 2 classes, A and B, derived from QObject, each have a property<br>
of type pointer-to-other-class. So<br>
<br>
class A : public QObject {<br>
Q_PROPERTY(B *foo …)<br>
…<br>
};<br>
<br>
And:<br>
<br>
class B : public QObject {<br>
Q_PROPERTY(A *foo …)<br>
…<br>
};<br>
<br>
Because of the circular dependency, I can’t #include the full class<br>
definition, just do forward declaration.<br>
<br>
Now this fails in Qt 6, seems the moc generated code needs the <br>
full class declaration.<br>
<br>
Looking at generated moc code, looks like creating the meta object<br>
requires a qt_metaTypeArray<A*, bool> which checks that A derives<br>
from QObject by calling  IsPointerToTypeDerivedFromQObject<br>
which uses sizeof() which requires the full type.<br>
<br>
Any way around this? Seems like a rather big regression compared<br>
to Qt 5…<br>
<br>
<br>
Mike<br>
<br>
—<br>
Mike Krus | mike.krus@kdab.com | Senior Software Engineer<br>
KDAB (UK) Ltd., a KDAB Group company<br>
Tel: UK Office +44 1625 809908   Mobile +44 7833 491941<br>
KDAB - The Qt Experts, C++, OpenGL Experts<br>
<br>
<br>
</div>
</span></font></div>
</body>
</html>