【问题标题】:use a QList<QVariantMap> as a model for a QML ListView使用 QList<QVariantMap> 作为 QML ListView 的模型
【发布时间】:2013-06-17 19:50:01
【问题描述】:

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

main.cpp - 我在这里注册 QList

viewer.rootContext()->setContextProperty("productlist", QVariant::fromValue(databaseController.listProjects()) );

main.qml - 这里我想使用模型'productlist'

ListView {
    id: list_view

    anchors.fill: parent
    model: productlist
    delegate:
        Rectangle{
           height: 20
           width: 200
           color: "#CCCCCC"
           Text { text:  modelData.name }
        }
}

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

我正在使用 QtQuick 2.0 和 Qt 5

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

感谢您的帮助

【问题讨论】:

    标签: c++ qml qt5


    【解决方案1】:

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

    QVariantList myModel;
    foreach (QVariantMap item, databaseController.listProjects()) {
        myModel.append (item);
    }
    
    viewer.rootContext()->setContextProperty("productlist", QVariant::fromValue(myModel));
    

    它已经完成了!

    【讨论】:

    • QVariantlist 如何等同于 QList ? (真正的问题,我和OP一样的问题)
    • @FélixCantournet:实际上 QVariantList 是 QList 的 typedef,QVariant 可以透明地用 QVariantMap 填充,因此可以将 QVariantMap 作为 QVariantList 的项提供。
    猜你喜欢
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多