在Windows上混合使用Qt和Objective-C
Mixing Qt and Objective-C on Windows
我通常在OSX和iOS上开发应用程序。我发现Objective-C对许多任务都很有用,在许多情况下,它可以加快工作速度。
我想将我的应用程序也移植到Windows系统上。我意识到(如果你有其他解决方案,请告诉我!)Qt可能是一个非常有用的工具!使用Qt创建GUI既简单又快速。问题是Qt与C++配合使用,OSX与Objective-C配合使用。
我读到Qt可以处理Objective-C源,事实上,您可以找到OBJECTIVE_SOURCES
和OBJECTIVE_HEADERS
makefile变量。
我搜索了如何配置QtCreator以接受.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,我考虑了一个"桥"(就像我在Cocoa中混合Objective-C和C++时所做的那样),所以我创建了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接口生成器,但不幸的是,使用Gorm构建的GUI完全无法使用Jaws或NVDA等辅助工具访问,我需要为视障人士创建一些应用程序!
非常感谢
链接器错误"未定义对函数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>
- Qt VTK交互风格的信号到小部件
- QT在错误的班级中寻找空位
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 如何在Qt C++中更改光标
- 如何在MS Visual Studio 2019中运行QT UI
- QT通过C++添加映射QML项目
- libssh 的函数在构建 libssh 时无法在 Qt 和 cmake 错误中找到
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用Qt C++计算类似Git的SHA1哈希
- Qt focusObjectChanged example?
- 如何在cpp文件之间切换窗口?在Qt中
- Qt和C++:将QLineEdit添加到QTabWidget中
- 从数据库实时显示QT c++中的数据
- Mac Snow Leopard 上的 Qt 5.3.2:ld:在架构x86_64 [clang、Objective-C
- lambda(块)插槽通过Qt中的Objective-c
- Qt:Objective-C 标头被编译为 c++-header
- 在Windows上混合使用Qt和Objective-C
- Objective-C in Qt with Mavericks