加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 在Windows上混合Qt和Objective-C

发布时间:2020-12-16 07:09:34 所属栏目:百科 来源:网络整理
导读:我通常在OSX和iOS上开发应用程序.我发现Objective-C对于许多任务非常有用,并且在许多情况下,可以加快工作速度. 我想在Windows系统上移植我的应用程序.我意识到(如果你有任何其他解决方案请告诉我!)Qt可能是一个非常有用的工具!使用Qt创建GUI简单快捷.问题
我通常在OSX和iOS上开发应用程序.我发现Objective-C对于许多任务非常有用,并且在许多情况下,可以加快工作速度.

我想在Windows系统上移植我的应用程序.我意识到(如果你有任何其他解决方案请告诉我!)Qt可能是一个非常有用的工具!使用Qt创建GUI简单快捷.问题是Qt适用于C,OSX适用于Objective-C.

我读过Qt可以处理Objective-C源,实际上你可以找到OBJECTIVE_SOURCES和OBJECTIVE_HEADERS的makefile变量.

我搜索了如何配置Qt 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.cpp和test.h及其test.mm.为了混合C和Objective-C,我想到了一个“桥”(就像我在混合Objective-C和C时在Cocoa中所做的那样),所以我创建了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文件创建的.o对象文件.

你们中的任何人都可以告诉我这个过程是否有问题或指向我如何配置Qt接受Objective-C语言的教程?

还有另一个我真正喜欢的解决方案,它是纯粹的Objective-C,即使用GNUStep Gorm界面构建器,但遗憾的是,使用Jaws或NVDA等可访问性工具完全无法访问使用Gorm构建的GUI,我需要创建一些应用程序适合视障人士!

非常感谢你

解决方法

链接器错误“未定义对函数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时,您需要包含其定义,因此只需将其添加到includes中,就像在Objective-C程序中通常那样:

#import <Foundation/NSString.h>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读