Jestem nowy w kodowaniu w QML i próbuję napisać moją pierwszą aplikację Sailfish OS. Dla zaplecza utworzyłem jedną klasę C++. Jednak chcę utworzyć instancję jednego obiektu z tej klasy C++ i użyć go zarówno na okładce, jak i na stronie głównej (dwa oddzielne pliki QML), dzięki czemu mogę pracować z tymi samymi danymi przechowywanymi w tej klasie. Jak adresuje ten sam obiekt w oddzielnych plikach QML?Udostępnianie obiektu między plikami QML
5
A
Odpowiedz
7
Można dokonać przedmiot dostępny w kontekście QtQuick:
class MySharedObject : public QObject {
Q_OBJECT
public:
MySharedObject(QObject * p = 0) : QObject(p) {}
public slots:
QString mySharedSlot() { return "blablabla"; }
};
w main.cpp
MySharedObject obj;
view.rootContext()->setContextProperty("sharedObject", &obj);
iz dowolnego miejsca w QML:
console.log(sharedObject.mySharedSlot())
jeśli nie” Jeśli chcesz mieć to "globalnie" w QML, możesz zrobić trochę, by je enkapsulować, po prostu stwórz inną pochodną QObject
ed klasy, zarejestruj ją, aby utworzyć instancję w QML i mieć właściwość, która zwraca wskaźnik do tej instancji obiektu, w ten sposób będzie dostępna tylko wtedy, gdy utworzysz obiekt QML "accessor".
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
};
w main.cpp
MySharedObject obj;
qRegisterMetaType<MySharedObject*>();
SharedObjAccessor::setSharedObject(&obj);
qmlRegisterType<SharedObjAccessor>("Test", 1, 0, "SharedObjAccessor");
aw QML
import Test 1.0
...
SharedObjAccessor {
id: acc
}
...
console.log(acc.sharedObject.mySharedSlot())