<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[QT Q_MOC_RUN]]></title><description><![CDATA[<p>Hi leute</p>
<p>ich habe einen Header ( enthalten ist eine Klasse ), der aus einem framework stammt, welches ich in meinen QT-Projekt verwende. Dieses framework ist aber nicht visuell, d.h. es hat mit QT nix zu tun. Nun möchte ich ein Objekt dieser Klasse über die Signal-Slot-Mechanik transportieren und muss es dafür mit Q_DECLARE_METATYPE anmelden.</p>
<pre><code class="language-cpp">#ifdef Q_MOC_RUN
    #include &lt;QMetaType&gt;
#endif

class MyClass
{
...
};

#ifdef Q_MOC_RUN
    Q_DECLARE_METATYPE(MyClass );
#endif
</code></pre>
<p>Und das register ist dann hier:</p>
<pre><code class="language-cpp">#include &lt;QMetaType&gt;
#include &quot;myclass.h&quot;

int main(int argc, char *argv[])
{
    qRegisterMetaType&lt;MyClass&gt; ();
...
}
</code></pre>
<p>Leider schlägt &quot;qRegisterMetaType&quot; dann hinterher fehl, mit dem Hinweis, dass ich doch bitte Q_DECLARE_METATYPE benutzen sollte...</p>
<p>Wenn ich die Compilerweiche kurz auskommentiere, dann compiliert es! Aber der Header muss für andere Nicht-QT-Projekte compilierbar bleiben, daher muss eine Weiche her oder eine bessere Lösung.</p>
<p>Was ist hier mein Fehler? Wird &quot;Q_MOC_RUN&quot; überhaupt gesetzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/348619/qt-q_moc_run</link><generator>RSS for Node</generator><lastBuildDate>Fri, 17 Apr 2026 16:22:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/348619.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 30 Nov 2018 07:45:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to QT Q_MOC_RUN on Fri, 30 Nov 2018 07:50:14 GMT]]></title><description><![CDATA[<p>Hi leute</p>
<p>ich habe einen Header ( enthalten ist eine Klasse ), der aus einem framework stammt, welches ich in meinen QT-Projekt verwende. Dieses framework ist aber nicht visuell, d.h. es hat mit QT nix zu tun. Nun möchte ich ein Objekt dieser Klasse über die Signal-Slot-Mechanik transportieren und muss es dafür mit Q_DECLARE_METATYPE anmelden.</p>
<pre><code class="language-cpp">#ifdef Q_MOC_RUN
    #include &lt;QMetaType&gt;
#endif

class MyClass
{
...
};

#ifdef Q_MOC_RUN
    Q_DECLARE_METATYPE(MyClass );
#endif
</code></pre>
<p>Und das register ist dann hier:</p>
<pre><code class="language-cpp">#include &lt;QMetaType&gt;
#include &quot;myclass.h&quot;

int main(int argc, char *argv[])
{
    qRegisterMetaType&lt;MyClass&gt; ();
...
}
</code></pre>
<p>Leider schlägt &quot;qRegisterMetaType&quot; dann hinterher fehl, mit dem Hinweis, dass ich doch bitte Q_DECLARE_METATYPE benutzen sollte...</p>
<p>Wenn ich die Compilerweiche kurz auskommentiere, dann compiliert es! Aber der Header muss für andere Nicht-QT-Projekte compilierbar bleiben, daher muss eine Weiche her oder eine bessere Lösung.</p>
<p>Was ist hier mein Fehler? Wird &quot;Q_MOC_RUN&quot; überhaupt gesetzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2566232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2566232</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Fri, 30 Nov 2018 07:50:14 GMT</pubDate></item><item><title><![CDATA[Reply to QT Q_MOC_RUN on Fri, 30 Nov 2018 07:55:31 GMT]]></title><description><![CDATA[<p>Du kannst ja mal</p>
<pre><code class="language-cpp">#ifdef Q_MOC_RUN
    #include &lt;QMetaType&gt;
#else
   #error &quot;Q_MOC_RUN not set!&quot;
#endif
</code></pre>
<p>unter Qt kompilieren lassen. Wenn das durchläuft, dann ist noch etwas anderes falsch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2566234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2566234</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Fri, 30 Nov 2018 07:55:31 GMT</pubDate></item><item><title><![CDATA[Reply to QT Q_MOC_RUN on Fri, 30 Nov 2018 07:59:02 GMT]]></title><description><![CDATA[<p>Kompiliert nicht.<br />
Ich versuch mal noch ein älteres Kit... hab aktuell das 5.9.2</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2566235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2566235</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Fri, 30 Nov 2018 07:59:02 GMT</pubDate></item><item><title><![CDATA[Reply to QT Q_MOC_RUN on Fri, 30 Nov 2018 08:04:21 GMT]]></title><description><![CDATA[<p>Dann probiere mal</p>
<pre><code class="language-cpp">#ifndef Q_MOC_RUN
  #error &quot;Q_MOC_RUN not set!&quot;
#else
  #include &lt;QMetaType&gt;
#endif
</code></pre>
<p>(wie in <a href="https://doc.qt.io/archives/4.6/moc.html" rel="nofollow">Using the Meta-Object Compiler (moc)</a> beschrieben)</p>
<p>PS: Ich habe gerade im Internet <a href="https://woboq.com/blog/verdigris-qt-without-moc.html" rel="nofollow">Verdigris: Qt without moc </a> gefunden...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2566237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2566237</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Fri, 30 Nov 2018 08:04:21 GMT</pubDate></item><item><title><![CDATA[Reply to QT Q_MOC_RUN on Fri, 30 Nov 2018 08:07:10 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18594">@Th69</a> sagte in <a href="/forum/post/2566237">QT Q_MOC_RUN</a>:</p>
<blockquote>
<p>#ifndef Q_MOC_RUN<br />
#error &quot;Q_MOC_RUN not set!&quot;<br />
#else<br />
#include &lt;QMetaType&gt;<br />
#endif</p>
</blockquote>
<p>Kompiliert wie erwartet auch nicht.</p>
<p>Auf dem 5.7.1 Framework gehts übrigens auch nicht. Genau wie 5.9.2.<br />
Sehr merkwürdig.</p>
<p>Ich studiere erstmal deine Links. Dennoch bin ich verwundert, weil das Q_MOC_RUN eigentlich gesetzt sein müsste... Theoretisch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2566238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2566238</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Fri, 30 Nov 2018 08:07:10 GMT</pubDate></item><item><title><![CDATA[Reply to QT Q_MOC_RUN on Fri, 30 Nov 2018 08:09:21 GMT]]></title><description><![CDATA[<p>Deine Weiche ist schlicht falsch.<br />
Q_DECLARE_METATYPE ist nicht vom moc abhängig. Es definiert einfach eine definition von QMetaTypeId für den übergebenen typ. Und dieser Typ wird auch benötigt, wenn der code vom compiler übersetzt wird, da der vom moc generierte code vermutlich diesen definition referenziert</p>
<p>Du musst dir eine andere Weiche ausdenken um zwischen Qt build und ohne unterscheiden zu können.</p>
<p>Q_MOC_RUN wird von moc selbst definiert, wenn es über den code geht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2566239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2566239</guid><dc:creator><![CDATA[firefly]]></dc:creator><pubDate>Fri, 30 Nov 2018 08:09:21 GMT</pubDate></item><item><title><![CDATA[Reply to QT Q_MOC_RUN on Fri, 30 Nov 2018 08:12:41 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1725">@firefly</a><br />
Was wäre denn die &quot;richtige&quot; Weiche?</p>
<p>Was ich nicht unbedingt machen will: eine eigene Weiche definieren, denn wenn man recyclebaren Code baut und den dann in einem neuen Projekt verwenden will, vergisst man solche Weichen gerne mal, daher würde ich bevorzut eine Weiche nutzen, die QT von sich aus mitbringt und bisher dachte ich, das wäre Q_MOC_RUN...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2566241</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2566241</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Fri, 30 Nov 2018 08:12:41 GMT</pubDate></item><item><title><![CDATA[Reply to QT Q_MOC_RUN on Fri, 30 Nov 2018 08:16:07 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1725">@firefly</a>: Du meinst, daß <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6029">@It0101</a> immer <code>#include &lt;QMetaType&gt;</code> aufrufen muß, auch in einem Projekt ohne Qt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2566242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2566242</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Fri, 30 Nov 2018 08:16:07 GMT</pubDate></item><item><title><![CDATA[Reply to QT Q_MOC_RUN on Fri, 30 Nov 2018 08:37:49 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18594">@Th69</a> sagte in <a href="/forum/post/2566242">QT Q_MOC_RUN</a>:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1725">@firefly</a>: Du meinst, daß <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6029">@It0101</a> immer <code>#include &lt;QMetaType&gt;</code> aufrufen muß, auch in einem Projekt ohne Qt?</p>
</blockquote>
<p>Das geht halt schon deswegen nicht, weil andere Projekte den Header gar nicht finden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2566245</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2566245</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Fri, 30 Nov 2018 08:37:49 GMT</pubDate></item><item><title><![CDATA[Reply to QT Q_MOC_RUN on Fri, 30 Nov 2018 08:48:25 GMT]]></title><description><![CDATA[<p>Ich löse das jetzt erstmal temporär in der Form, als dass ich einen zusätzlichen Header mache, der den originalen Header inkludiert und das Q_DECLARE_METATYPE aufruft. An jeder Stelle im Code, in der ich &quot;MyClass&quot; benötige, inkludiere ich dann entsprechen diesen Header.</p>
<pre><code class="language-cpp">#ifndef MYMETATYPES_H
#define MYMETATYPES_H

#include &lt;QMetaType&gt;

// MyClass: Registrierung fuer SignalSlot
#include &quot;myclass.h&quot;
Q_DECLARE_METATYPE( MyClass );

// zum Aufruf in &quot;main.cpp&quot;
inline void regMetaTypes()
{
    qRegisterMetaType&lt;MyClass&gt; ();
}

#endif // MYMETATYPES_H
</code></pre>
<p>Keine besonders schöne Lösung, aber sie löst erstmal temporär das Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2566248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2566248</guid><dc:creator><![CDATA[It0101]]></dc:creator><pubDate>Fri, 30 Nov 2018 08:48:25 GMT</pubDate></item><item><title><![CDATA[Reply to QT Q_MOC_RUN on Fri, 30 Nov 2018 12:30:30 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18594">@Th69</a> sagte in <a href="/forum/post/2566242">QT Q_MOC_RUN</a>:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1725">@firefly</a>: Du meinst, daß <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6029">@It0101</a> immer <code>#include &lt;QMetaType&gt;</code> aufrufen muß, auch in einem Projekt ohne Qt?</p>
</blockquote>
<p>Nein! sondern der Qt relevante part muss über ein anderes Preprocessor define aktiviert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2566279</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2566279</guid><dc:creator><![CDATA[firefly]]></dc:creator><pubDate>Fri, 30 Nov 2018 12:30:30 GMT</pubDate></item></channel></rss>