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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top