MOC Hinzufügen von Namespace Klassennamen
-
30-09-2019 - |
Frage
ich dieses sehr seltsames Problem haben, während das Projekt zu kompilieren. MOC scheint ein Namespace auf den Klassennamen werden, indem moc'ed wird, obwohl es ist nicht überall in der Datei / Klasse erwähnt.
Der Namensraum besteht jedoch in einer Bibliothek, die ich benutze, aber es ist versteckt weit weg in den Header-Dateien und ich es nicht in den UI-Dateien verwenden. Dies ist, was MOC erzeugt:
const QMetaObject SmpTl::CaptureController::staticMetaObject = {
{ &QObject::staticMetaObject, qt_meta_stringdata_SmpTl__CaptureController,
qt_meta_data_SmpTl__CaptureController, 0 }};
Der SmpTl
Namespace ist nicht überall in der Erklärung von CaptureController
erwähnt, aber es wird in der MOC-generated CPP-Datei.
Ich bin mit Visual Studio mit der QT-Integration.
Lösung
SmpTl
ist die Namespace CaptureController
in definiert ist, wie es von MOC gefunden wurde.
Das Q_OBJECT
Makro wird in der Deklaration der staticMetaObject
-Variable in Ihrer Klassendefinition (unter anderem dehnt es sich in). Die MOC-Datei enthält die Definition dieser Variablen.
Wenn dies nicht korrekt ist, bitte posten Sie Ihre Qt-Version und eine abgespeckte Version der Kopfdatei.
Andere Tipps
Ich lief auch in dieses Problem. Ich hatte Code, der so aussah:
namespace foo {
#ifdef _WIN32
... // This code was fine
#else
#error Not Supported
#endif
}
Dies verwirrt MOC in dem Denken Namespace foo
nie geschlossen. Anscheinend es wusste nicht, _WIN32
definiert wurde, und wurde durch die Tatsache ausgelöst, dass ich vergessen Anführungszeichen um die Fehlermeldung zu setzen. Ändern Sie es an:
#error "Not Supported"
fixed mein Problem.