簡體   English   中英

使用C ++在qml文件中的Chage ListModel數據

[英]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 setContextPropertyQQmlContext 一般來說, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM