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

标签 c++ qml qt5

我不知道如何使用 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 的内容,但不知道如何使用它。我是在正确的轨道上还是有更简单的方法?

谢谢你的帮助

最佳答案

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

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

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

完成了!

关于c++ - 使用 QList<QVariantMap> 作为 QML ListView 的模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17017365/

相关文章:

javascript - 如何在 javascript 中使用 Qml Fonttype?

qt - 如何制作一些可重用的 QML 对象,它可以注入(inject)另一个 QML 对象?

c++ - 当作为 QDBusVariant/QVariant 发送时 Qt DBus 解码

c++ - 有条件地实例化一个具有已删除的默认构造函数的类

外部服务器的 C++ 客户端和外部客户端的服务器与 boost::asio 协程同时使用

c++ - 从 C++ 插槽更改 QML 对象

c++ - 最大化小部件时如何在没有其他 QPushButton 的情况下扩展特定 QPushButton 的大小

python - QLayout 中的重叠小部件

c++ - 不明白为什么我会收到异常 : Access violation reading location 0x00000000

c++ - 无法使用 istream C++ 重载 >> 运算符