Другой подход должен был бы не использовать Qt/C++, но cre ели классы C++ внутри Objective C и избежать Qt вообще, выбирая для них включает в себя, чтобы сделать жизнь намного проще в C++:
#include <string>
#include <stdio.h>
#include <sqlite3.h>
#include <Foundation/Foundation.h>
string docs
stdio docs
stdio notes
sqlite3 docs
Apple Foundation Class docs
Кроме того, можно (и на самом деле) смешать немного Objective C в их коде на C++, чтобы облегчить жизнь. Вот пример .mm
файл, который является типом файла, который позволяет смешивать C++ и Objective C:
#include <string>
#include <stdio.h>
#include <sqlite3.h>
#include <Foundation/Foundation.h>
class Testlib {
public:
std::string test(std::string sIn) {
sIn = sIn.append("-response");
return sIn;
}
NS_RETURNS_RETAINED NSString *test2(NSString *sIn) {
// note [[funky Objective C syntax]]
NSString *sOut = [[NSString alloc] init];
sOut = [NSString stringWithFormat:@"%@-response", sIn];
return sOut;
}
};
Для того, чтобы я называю это из моего файла main.m, мне пришлось переименовать его в main.mm а затем сделать что-то вроде:
#import <Cocoa/Cocoa.h>
#import "testlib.mm"
int main(int argc, const char * argv[]) {
// demo Testlib out to the debug log
Testlib *o = new Testlib();
std::string s = "";
s = o->test("request");
NSLog(@"Result=%s",s.c_str());
NSLog(@"Result2=%@",o->test2(@"request"));
// load our GUI
return NSApplicationMain(argc, argv);
}
Так, по большей части, это дает легкость использования C++, но делает его мощным с материалом SQLite3 и Apple, Foundation Class, чтобы сделать довольно много, что один использовал бы Qt для (без необходимости включения очень больших библиотек среды выполнения Qt). Тем не менее, для GUI - Cocoa довольно разрежен по вариантам (смею сказать фашистский) по сравнению с Qt, поэтому я предпочитаю использовать Mac-родной WebKit внутри Cocoa, что открывает обширный набор стилей GUI. Кроме того, используя собственный WebKit Mac вместо встроенного WebKit Qt, вы можете уменьшить размер .app
примерно на 30 МБ.
Является ли cppclass.h заголовочным файлом моего класса Qt/C++? И как включить ссылку dylib в мой проект ObjC? И какой файл я должен использовать - я предполагаю libtestlib.1.0.0.dylib? – Volomike
Я в замешательстве. Я пошел в XCode7 и добавил фреймворк libtestlib.1.0.0.dylib в Linked Frameworks и Libraries. Затем я добавил файл .h в проект. Затем, в моем файле main.m, я добавил 'import 'testlib.h" '. Он видит testlib, но класс почему-то не виден. Все, что я вижу, это: TESTLIBSHARED_EXPORT. – Volomike
Да, похоже, что вы идете в правильном направлении с добавлением '.dylib' в * Link Libraries and Frameworks *, однако если' testlib.h' определяет класс C++ (или функции или использует классы C++), тогда вам понадобится переименовать 'main.m' в' main.mm'. – trojanfoe