使用C ++

时间:2016-12-14 19:19:59

标签: c++ qml listmodel

有一个示例:http://doc.qt.io/qt-5/qtdatavisualization-qmlscatter-example.html使用qml和QtQuick创建3D散点图。

如何使用C ++代码在Data.qml文件中查找(删除,追加,清除)ListModel数据?

Data.qml

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 }
         ...
     }
     ...
}

1 个答案:

答案 0 :(得分:2)

如果要从C ++修改模型,可以将实现QAbstractItemModel的对象注册到QML运行时。

QAbstraactItemModel是一个相当复杂的类,有一些有用的派生类型可以使实现更容易,但这取决于你的用例。例如,QAbstractListModel对于列表非常有用,而不是表格,QStandardItemModel对于可以在QStandardItems轻松建模的数据非常有用。

在C ++中实现模型后,您需要将其提供给QML运行时。这是使用setContextProperty上的QQmlContext完成的。通常,您想要的QQmlContextrootContext()的{​​{1}}。

注册可能如下所示:

QQmlEngine

要从QML中访问模型,请使用其注册的名称,在本例中为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(); [...] }

myListModel