You can make an object available in the context of QtQuick:
class MySharedObject : public QObject { Q_OBJECT public: MySharedObject(QObject * p = 0) : QObject(p) {} public slots: QString mySharedSlot() { return "blablabla"; } };
in main.cpp
MySharedObject obj; view.rootContext()->setContextProperty("sharedObject", &obj);
and from anywhere in QML:
console.log(sharedObject.mySharedSlot())
If you do not want it to be "global" in QML, you can encapsulate it a bit, just create another derived QObject class, register it to create an instance in QML and get the property returns a pointer to this object instance in it, so it will be only available where you instantiate the QML "accessor" object.
class SharedObjAccessor : public QObject { Q_OBJECT Q_PROPERTY(MySharedObject * sharedObject READ sharedObject) public: SharedObjAccessor(QObject * p = 0) : QObject(p) {} MySharedObject * sharedObject() { return _obj; } static void setSharedObject(MySharedObject * obj) { _obj = obj; } private: static MySharedObject * _obj;
in main.cpp
MySharedObject obj; qRegisterMetaType<MySharedObject*>(); SharedObjAccessor::setSharedObject(&obj); qmlRegisterType<SharedObjAccessor>("Test", 1, 0, "SharedObjAccessor");
and in QML
import Test 1.0 ... SharedObjAccessor { id: acc } ... console.log(acc.sharedObject.mySharedSlot())
dtech source share