[英]Chage ListModel data in qml file using C++
有一個示例: http : //doc.qt.io/qt-5/qtdatavisualization-qmlscatter-example.html使用qml和QtQuick創建3D散點圖。
如何使用C ++代碼修改(刪除,附加,清除)Data.qml文件中的ListModel數據?
數據文件
import QtQuick 2.1
Item {
property alias model: dataModel
property alias modelTwo: dataModelTwo
property alias modelThree: dataModelThree
ListModel {
id: dataModel
ListElement{ xPos: -10.0; yPos: 5.0; zPos: -5.0 }
ListElement{ xPos: -9.0; yPos: 3.0; zPos: -4.5 }
ListElement{ xPos: -8.5; yPos: 4.1; zPos: -4.0 }
...
}
...
}
如果要從C ++修改模型,可以將實現QAbstractItemModel
的對象注冊到QML運行時。
QAbstraactItemModel
是一個相當復雜的類,有一些有用的派生類型可以QAbstraactItemModel
實現,但這取決於您的用例。 例如,與表相反, QAbstractListModel
對於列表有用,而QStandardItemModel
對於可以在QStandardItems
輕松建模的數據有用。
使用C ++實現模型后,您需要使其可用於QML運行時。 這是通過使用QQmlContext
setContextProperty
來QQmlContext
。 一般來說, QQmlContext
你想要的是rootContext()
你的QQmlEngine
。
注冊可能看起來像這樣:
int main(int argc, char **argv) {
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
MyListModel *model = new MyListModel;
engine.rootContext()->setContextProperty("myListModel", model);
engine.load(":/myqmlapp.qml");
app.exec();
[...]
}
要從QML中訪問模型,請使用其注冊名稱,在本例中為myListModel
:
import QtQuick 2.7
Item {
ListView {
model: myListModel
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.