0

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

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

数据.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 }
         ...
     }
     ...
}
4

1 回答 1

2

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

QAbstraactItemModel是一个相当复杂的类,有一些有用的派生类型可以使实现更容易,但这取决于您的用例。例如,QAbstractListModel与表格相反,它对列表很有用,并且QStandardItemModel对可以轻松建模的数据很有用QStandardItems

一旦你在 C++ 中实现了模型,你需要让它对 QML 运行时可用。这是使用setContextPropertyon完成的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
    }
}
于 2016-12-15T00:10:41.850 回答