在Windows上混合使用Qt和Objective-C

我通常在OSX和iOS上开发应用程序。 我发现Objective-C对许多任务来说是非常有用的,而且在很多情况下可以加快工作速度。

我想在Windows系统上移植我的应用程序。 我意识到(如果你有任何其他解决scheme,请让我知道!)Qt可能是一个非常有用的工具! 用Qt创buildGUI简单而快速。 问题是Qt与C ++一起工作,而OSX与Objective-C协同工作。

我读过Qt可以处理Objective-C的源代码,实际上你可以findOBJECTIVE_SOURCESOBJECTIVE_HEADERS makefilevariables。

我search了如何configurationQt Creator来接受.mm文件,但我无法使其工作。

.pro文件里面有如下内容:

  ... OBJECTIVE_SOURCES += \ test.mm INCLUDEPATH += "C:\GNUStep\...\Headers" LIBS += -L"C:\GNUStep\...\Libraries" -lobjc -lgnustep-base QMAKE_CXXFLAGS += -fconstant-string-class=NSConstantString -std=c99 ... 

我非常简单的项目是一个小部件( .h.cpp ), main.cpptest.h以及test.mm 为了混合C ++和Objective-C,我想到了一个“桥梁”(就像我在Cocoa中混合Objective-C和C ++时那样),所以我创build了test.h作为一个简单的头文件(没有Objective-C,只有一个桥):

  // test.h void testFunction( void ); 

比:

  // test.mm #import <Foundation/Foundation.h> void testFunction( void ) { NSString* string; string = @"This is a test string"; NSLog( @"%@", string ); } 

最后:

  // main.cpp ... #include "test.h" ... testFunction(); ... 

链接器给了我经典的“未定义的函数testFunction的参考”。 像这样的东西不能链接从.mm文件创build的.o对象文件。

你们中的任何人都可以告诉我,如果这个过程出了什么问题,或者指向一个关于如何configurationQt接受Objective-C语言的教程?

还有另外一个我真正喜欢的解决scheme,它是纯粹的Objective-C,也就是使用GNUStep Gorm接口生成器,但不幸的是,使用Gorm构build的GUI完全不能用像Jaws或NVDA这样的辅助工具访问,我需要创build一些应用程序为视障人士!

非常感谢你

Solutions Collecting From Web of "在Windows上混合使用Qt和Objective-C"

链接器错误“函数testFunction的未定义引用”,我怀疑是由于testFunction中没有定义的东西。

你恰当的将Objective-c与Qt混合在一起,只需创建一个带C函数的头文件和一个扩展名为.m或.mm的实现文件,在这个扩展文件中你可以编写Objective-C代码并在.pro中引用实现在OBJECTIVE_SOURCES下

当你使用objective-c和NSString类时,你也需要链接到相关的框架。 在这种情况下,它是基础。

所以,在你的配置(.pro)文件中: –

 LIBS += -framework Foundation 

如果你想添加另一个,比如Appkit,那么它将是:

 LIBS += -framework Foundation LIBS += -framework AppKit 

当我混合语言的时候,我的.pro文件中唯一的另外一个补充是:

 QMAKE_CXXFLAGS += -F/Library/Frameworks QMAKE_CFLAGS += -F/Library/Frameworks QMAKE_LFLAGS += -F/Library/Frameworks 

当你在测试函数实现中引用NSString时,你需要包含它的定义,所以把它添加到包含中,就像你在Objective-C程序中通常做的那样:

 #import <Foundation/NSString.h>