gpt4 book ai didi

c++ - 使用来自 std::map 的数据填充 QML ListView

转载 作者:行者123 更新时间:2023-11-28 00:05:47 33 4
gpt4 key购买 nike

我找不到在 QML 中显示 std::map 项目的好方法。我们在我们的应用程序中使用 MVVM 模式。 std::map 包含文件路径并且是模型中配置类的成员。现在我试图在 QML 中显示 map 的所有条目,可能使用 ListView 项目。目前我们在配置中只有几个文件路径,所以它们作为 Q_PROPERTYies 暴露给 View 模型,然后进一步暴露给 QML。但是,当然,路径的数量可以而且将会增加,因此我的想法是为此使用 std::map。没有必要让它在运行时“可增长”,至少在可预见的 future 不需要。但是写很多很多 Q_PROPERTYies 对我来说似乎不是正确的方式。

进一步的问题:我如何在 QML ListView 中访问/显示 map 的项目 - 我无法弄清楚,我在网上找不到任何有用的东西。

最佳答案

@ddriver 建议的另一个选项是创建 QObject 派生类型的列表,例如:

class ConfigObject: public QObject
{
Q_PROPERTY(QString key READ key)
Q_PROPERTY(QString value READ value)
// ... getters and key and value members
};

用它们填充 QList 并通过以下方式将它们作为 ListView 的模型提供

QVariantList configModel;
// ... fill it with ConfigObjects from std::map
engine.rootContext()->setContextProperty("configModel", &configModel); //QQmlApplicationEngine here

或者某个类的属性:

Q_PROPERTY(QVariant configModel READ configModel NOTIFY configModelChanged)

然后您应该能够通过 ListView 委托(delegate)中的 modelData.key 和 modelData.value 使用它。

ListView {
model: configModel // in case of using context
delegate: Item {
...
Text {
text: modelData.key
}
Text {
text: modelData.value
}
}
}

关于c++ - 使用来自 std::map 的数据填充 QML ListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35749162/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com