:
MAIN.CPP
MySharedObject obj;
view.rootContext()->setContextProperty("sharedObject", &obj);
어디서나 QML에서의
class MySharedObject : public QObject {
Q_OBJECT
public:
MySharedObject(QObject * p = 0) : QObject(p) {}
public slots:
QString mySharedSlot() { return "blablabla"; }
};
:
console.log(sharedObject.mySharedSlot())
것은 당신이 '돈 경우 QML에서 "전역"으로 만들고 싶다면 캡슐화하기 위해 조금만 돌아 가면 다른 QObject
파생물을 만들 수 있습니다. QML에서 인스턴스화하고 그 안에 객체 인스턴스에 대한 포인터를 반환하는 속성을 등록하십시오. 이렇게하면 "접근 자"QML 객체를 인스턴스화하는 경우에만 사용할 수 있습니다.
MySharedObject obj;
qRegisterMetaType<MySharedObject*>();
SharedObjAccessor::setSharedObject(&obj);
qmlRegisterType<SharedObjAccessor>("Test", 1, 0, "SharedObjAccessor");
및 QML
에
import Test 1.0
...
SharedObjAccessor {
id: acc
}
...
console.log(acc.sharedObject.mySharedSlot())
MAIN.CPP에
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; // remember to init in the cpp file
};