Domanda

ho questo molto strano problema durante la compilazione del progetto. MOC sembra essere l'aggiunta di uno spazio dei nomi per il nome della classe in fase di moc'ed, anche se non è menzionato da nessuna parte nel file / di classe.

Lo spazio dei nomi, tuttavia, esiste in una libreria che uso, ma è nascosto lontano nei file di intestazione e io non lo uso nei file di interfaccia utente. Questo è ciò che genera MOC:

const QMetaObject SmpTl::CaptureController::staticMetaObject = {
{ &QObject::staticMetaObject, qt_meta_stringdata_SmpTl__CaptureController,
  qt_meta_data_SmpTl__CaptureController, 0 }};

Lo spazio dei nomi SmpTl non è menzionato da nessuna parte nella dichiarazione di CaptureController, ma appare nel file cpp MOC-generated.

Sto usando Visual Studio con l'integrazione QT.

È stato utile?

Soluzione

SmpTl è il CaptureController spazio dei nomi è definito in, come è stato trovato dalla MOC.

La macro Q_OBJECT si espande nella dichiarazione della staticMetaObject variabile all'interno della vostra definizione di classe (tra le altre cose si espande in). Il file MOC contiene la definizione di quella variabile.

Se questo non è corretto, si prega di inviare la versione Qt e una versione ridotta del file di intestazione.

Altri suggerimenti

Ho anche imbattuto in questo problema. Ho avuto il codice che si presentava così:

namespace foo {
    #ifdef _WIN32
    ...   // This code was fine
    #else
    #error Not Supported
    #endif
}

Questa MOC confuso nel pensare namespace foo mai chiusa. A quanto pare, non sapeva _WIN32 è stato definito, e ottenuto sgambetto dal fatto che ho dimenticato di mettere le virgolette attorno al messaggio di errore. Cambiare a:

#error "Not Supported"

fisso il mio problema.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top