5
我是QML編程新手,我正在嘗試編寫我的第一個Sailfish操作系統應用程序。對於後端,我創建了一個C++類。但是,我想實例化該C++類的一個對象,並在封面和主頁(兩個獨立的QML文件)中使用它,因此我可以使用存儲在該類中的相同數據。如何在單獨的QML文件中尋址同一個對象?在QML文件之間共享對象
我是QML編程新手,我正在嘗試編寫我的第一個Sailfish操作系統應用程序。對於後端,我創建了一個C++類。但是,我想實例化該C++類的一個對象,並在封面和主頁(兩個獨立的QML文件)中使用它,因此我可以使用存儲在該類中的相同數據。如何在單獨的QML文件中尋址同一個對象?在QML文件之間共享對象
您就可以將物體在QtQuick方面:
class MySharedObject : public QObject {
Q_OBJECT
public:
MySharedObject(QObject * p = 0) : QObject(p) {}
public slots:
QString mySharedSlot() { return "blablabla"; }
};
在main.cpp中
MySharedObject obj;
view.rootContext()->setContextProperty("sharedObject", &obj);
,並從任何地方在QML:
console.log(sharedObject.mySharedSlot())
如果你不」要想在QML中擁有「全局」,你可以稍微封裝它,只需創建另一個QObject
deriv ed類,註冊它在QML中實例化,並在其中有一個屬性,它返回一個指向該對象實例的指針,這樣它將僅在實例化「訪問者」QML對象的位置可用。
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
};
在main.cpp中
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())