繁体   English   中英

为什么 QList 不能作为 model 到 QML GridView 工作?

[英]Why QList is not working as model to QML GridView?

我在从 ZF6F87C9FDCF8B3C3F07F93F1EE8712C9 的GridView中将 model 设置为 GridView 时遇到问题。 从有关在 qml 中将 Model 设置为 GridView 的文档中说:

如果使用 C++ model class,它必须是 QAbstractItemModel 的子类或简单列表。

在我的情况下,我的数据是矩阵(9x9)中的数字,所以我认为最简单的方法是在我的 QML GridView 中使用简单的整数列表作为 model。 我的 QML GridView 是:

GridView
{
    id: gridView
    width: root.gridSize
    height: root.gridSize
    Layout.alignment: Qt.AlignHCenter
    model: gridModel
    delegate: Text { text: modelData }
}

main.cpp中进行测试,我尝试了这种方式:

QList<int> test;
test << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 11;
engine.rootContext()->setContextProperty("gridModel", QVariant::fromValue(test));

这不起作用,qml 中不显示数据。 此外,如果我尝试QList<QString>数据不会显示在 QML 中。

但是,如果我尝试像这样使用QStringList ,它正在工作:

QStringList test;
test << "1" << "2" << "3" << "4" << "5" << "6" << "7" << "11";
engine.rootContext()->setContextProperty("gridModel", QVariant::fromValue(test));

我做错了什么? 为什么QStringList有效但QList<QString>无效? 由于 QStringList 继承自 QList,是否意味着它应该与QList<QString>相同? 我的目标是使用整数列表作为 model 到 gridview 但这也让我对字符串感到困惑。

一种可能的解决方案是使用QVariantList

QVariantList test;
test << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 11;
engine.rootContext()->setContextProperty("gridModel", test);

另一方面,以透明方式将QList<int>QList<QString>转换为 QML 数组是有效[] ,因为除了 object 具有length属性。

问题似乎是视图只支持它从 QAbstractItemModel、QStringList、QVariantList 和数字继承的类,而不支持其他项目。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM