2010-03-01 11 views
12

Tengo un proyecto puro de C++/Qt en una Mac, pero ahora encuentro que necesito llamar a algunos métodos solo disponibles en la API de Cocoa. Siguiendo las instrucciones que figuran aquí:Cómo mezclar Qt, C++ y Obj-C/Cocoa

http://el-tramo.be/blog/mixing-cocoa-and-qt

Tengo una aplicación de clase C++ en un fichero ".m". Como prueba, mi archivo "foo.m" contiene (#include métodos pertinentes han sido despojados por claridad) el siguiente código .:

int foo::getMagicNumber() 
{ 
    NSCursor *cursor = [NSCursor new]; 
} 

Al parecer, tengo que añadir el archivo .m a una variable llamada qmake OBJECTIVE_SOURCES . Mi archivo .pro proyecto es el siguiente:

TARGET = testApp 
CONFIG += console 
CONFIG -= app_bundle 
TEMPLATE = app 
SOURCES += main.cpp 
OBJECTIVE_SOURCES += foo.m 
HEADERS += test.h 

Sin embargo, me sale el siguiente error cada vez que intento y compilar mi proyecto:

foo.h:4expected '=', ',', ';', 'asm' or '__attribute__' before 'foo'

Esto está apuntando a la class foo archivo en mi cabecera archivo. Si elimino todas las llamadas de cacao del archivo .m y muevo el archivo .m a la sección SOURCES de mi archivo Qt .pro todo funciona como se esperaba.

Estoy usando Qt 4.6.0.

Mi pregunta es: ¿Cuál es la forma recomendada de integrar llamadas Cocoa con Qt/C++, y qué estoy haciendo mal en el ejemplo anterior?

Respuesta

17

Está compilando su archivo .m como Objective-C. Quiere que sea un archivo .mm para Objective-C++.

+2

Doh! El problema fue que el archivo ".m" en realidad debería ser ".mm": una vez que se ha cambiado, todo funciona perfectamente. – Thomi