Une autre approche serait de pas utiliser Qt/C++, mais cre mangé les classes C de l'intérieur de l'objectif C et éviter Qt tout à fait, en optant pour ceux-ci inclut pour rendre la vie beaucoup plus facile en 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
De plus, on peut (et il faut effectivement) mélanger un peu d'Objective C dans leur code C++ pour faciliter la vie. Voici un exemple de fichier .mm
, qui est le type de fichier qui vous permet de mélanger C++ et 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;
}
};
Pour moi d'appeler cela de mon dossier main.m, je devais le renommer en main.mm puis faire quelque chose comme:
#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);
}
Ainsi, pour la plupart, il donne la facilité d'utilisation de C++, mais il est puissant avec la substance Fondation SQLite3 et Apple classe à faire à peu près ce que l'on aurait utilisé Qt pour (sans avoir à inclure de très grandes bibliothèques de frameworks d'exécution Qt). Cependant, pour l'interface graphique - Cocoa est assez rare sur les options (j'ose dire fasciste) par rapport à Qt, c'est pourquoi j'opte pour utiliser Mac WebKit natif dans Cocoa, ce qui ouvre une vaste gamme de style graphique. En outre, en utilisant Mac WebKit natif au lieu de WebKit intégré de Qt, vous pouvez réduire la taille .app
d'environ 30 Mo.
Est-ce que cppclass.h est le fichier d'en-tête de ma classe Qt/C++? Et comment inclure le lien dylib dans mon projet ObjC? Et quel fichier suis-je censé utiliser - je suppose que libtestlib.1.0.0.dylib? – Volomike
Je suis confus. Je suis allé dans XCode7 et j'ai ajouté le framework libtestlib.1.0.0.dylib sous Linked Frameworks and Libraries. Ensuite, j'ai ajouté le fichier .h au projet. Ensuite, dans mon fichier main.m, j'ai ajouté 'import 'testlib.h" '. Il voit testlib, mais la classe n'est pas visible pour une raison quelconque. Tout ce que je vois est: TESTLIBSHARED_EXPORT. – Volomike
Ouais semble que vous allez dans la bonne direction avec l'ajout de '.dylib' à * Link Libraries et Frameworks *, cependant si' testlib.h' définit une classe C++ (ou fonctionne ou utilise des classes C++) alors vous aurez besoin renommer 'main.m' en' main.mm'. – trojanfoe