Pregunta

Tengo este problema muy extraño al compilar el proyecto. MOC parece ser la adición de un espacio de nombres para el nombre de la clase siendo moc'ed, aunque no se menciona en ninguna parte en el archivo / clase.

El espacio de nombres, sin embargo, existe en una biblioteca que yo uso, pero está escondido lejos, en los archivos de cabecera y yo no lo uso en los archivos de la interfaz de usuario. Esto es lo que genera MOC:

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

El espacio de nombres SmpTl no se menciona en ninguna parte en la declaración de CaptureController, pero aparece en el archivo .cpp generados MOC.

Estoy usando Visual Studio con la integración de QT.

¿Fue útil?

Solución

SmpTl es la CaptureController espacio de nombres se define en, ya que se encontró por MOC.

La macro Q_OBJECT se expande en la declaración de la staticMetaObject variable dentro de su definición de clase (entre otras cosas que se expande a). El MOC-archivo contiene la definición de esa variable.

Si esto no es correcto, por favor, puesto que su versión de Qt y una versión simplificada de la cabecera del archivo.

Otros consejos

También se encontró con este problema. Tenía código que se veía así:

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

Este MOC confundido en el pensamiento foo espacio de nombres nunca se cerró. Al parecer, no sabía _WIN32 se definió, y tuvo un tropiezo por el hecho de que se me olvidó poner comillas en el mensaje de error. Si lo cambia a:

#error "Not Supported"

fijo mi problema.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top