使用 QList<QVariantMap> 作为 QML ListView 的模型

4x1*_*x10 1 c++ qml qt5

我不知道如何使用 QList 作为模型。有几个数据类型是一维的示例,但还没有看到像这样嵌套的东西。相关代码如下:

main.cpp - 在这里我注册了 QList

viewer.rootContext()->setContextProperty("productlist", QVariant::fromValue(databaseController.listProjects()) );
Run Code Online (Sandbox Code Playgroud)

main.qml - 在这里我想使用模型“productlist”

ListView {
    id: list_view

    anchors.fill: parent
    model: productlist
    delegate:
        Rectangle{
           height: 20
           width: 200
           color: "#CCCCCC"
           Text { text:  modelData.name }
        }
}
Run Code Online (Sandbox Code Playgroud)

请注意,如果我使用databaseController.listProjects()[0],我当然可以获得第一个QVariantMap,并且该示例有效,尽管我不确定如何迭代值和/或键。

我正在使用 QtQuick 2.0 和 Qt 5

我读过一些关于 QAbstractListModel 的内容,但不知道如何使用它..我走在正确的轨道上还是有更简单的方法?

感谢您的帮助

The*_*roo 5

您可以轻松地使用 QVariantList 作为 ListView 的模型,但您需要知道它将是只读的,因为 QVariantList/QVariantMap 的 value() 是 const :

QVariantList myModel;
foreach (QVariantMap item, databaseController.listProjects()) {
    myModel.append (item);
}

viewer.rootContext()->setContextProperty("productlist", QVariant::fromValue(myModel));
Run Code Online (Sandbox Code Playgroud)

完成了!

  • @FélixCantournet:实际上 QVariantList 是 QList<QVariant> 的 typedef,并且 QVariant 可以透明地用 QVariantMap 填充,因此可以将 QVariantMap 作为 QVariantList 的项目提供。 (2认同)