Important: Please read the Qt Code of Conduct -

[SOLVED]Using objective-c class in qt c++

  • Hi,
    i want to implement an ios application with qt. I’ve installed qt on mac and i want to use objective-c code in qt c++. to fetch iphone address book, then i want to use it in qt c++

    For use objective-c class in qt c++, I’ve used the code from this link:

    //mainwindow.h public:
    int MyObjectDoSomethingWith(void *myObjectInstance, void *parameter);
    void someMethod(void *myObjectInstance, void *parameter);

    #import <Foundation/Foundation.h>

    @interface MyObject : NSObject

    // The Objective-C member function you want to call from C++ – (int) doSomethingWith:(void *) aParameter;


    void MainWindow::someMethod(void *objectiveCObject , void *aParameter)
    { int ret = MyObjectDoSomethingWith(objectiveCObject ,aParameter )

    #import “MyObject.h”

    @implementation MyObject

    // C “trampoline” function to invoke Objective-C method
    int MyObjectDoSomethingWith (void *self, void *aParameter)
    { // Call the Objective-C method using Objective-C syntax return [(id) self doSomethingWith:aParameter];

    • (int) doSomethingWith:(void *) aParameter
      { // The Objective-C function you wanted to call from C++. // do work here.. return 21 ; // half of 42

    LIBS += -framework Foundation

    Afetr building, i got these errors:
    symbol(s) not found for architecture x86_64
    linker command failed with exit code 1 (use -v to see invocation)

    I use qt5.3 on mac, please help me.

  • I found a solution.

    1- In QT header file, call a cpp method like:
    int MyCPPMethod(void *self, void * aParam)

    2- Implement the method in .mm file (objective c file)

    like this:

    //.mm file
    @interface MyObject :NSObject
    -(int)doSomethingWith:(void *) aParam;

    @implementation MyObject

    int MainWindow::MyCPPMethod(void *self, void * aParam)
    self = [[MyObject alloc] init];
    return [(id) self doSomethingWith:aParam];

    -(int)doSomethingWith:(void *) aParam
    NSLog(@"Result: %d" , 21);
    return 21;

    Good Luck :)

  • Is there a way to block the xCode if you don't download to a Mac? It won't compile on the developer machines that are using windows.


  • Qt Champions 2016

    @jman Check my example project. It could be built on other platform:

    quickios/examples/quickiosexample at master · benlau/quickios


    1. Place those .mm files in "ios {}" block in your .pro file

    quickios/ at master · benlau/quickios

    1. Use "#ifdef Q_OS_IOS..#endif" block in C++ code or use the SystemMessenger class from my project:

    quickios/ at master · benlau/quickios

Log in to reply