为什么 QList 不能作为 QML GridView 的模型工作?
Why QList is not working as model to QML GridView?
我在 C++ 端的 QML 中将模型设置为 GridView
时遇到问题。从 documentation 关于在 qml 中将模型设置为 GridView 它说:
If a C++ model class is used, it must be a subclass of
QAbstractItemModel or a simple list.
在我的例子中,我的数据是矩阵 (9x9) 中的数字,所以我认为最简单的方法是在我的 QML GridView 中使用简单的整数列表作为模型。我的 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>
一样呢?我的目标是使用整数列表作为 gridview 的模型,但这也让我对字符串感到困惑。
一种可能的解决方案是使用 QVariantList
:
QVariantList test;
test << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 11;
engine.rootContext()->setContextProperty("gridModel", test);
另一方面,QList<int>
和 QList<QString>
以透明方式转换为 QML 数组是有效的,可以验证这一点,因为可以使用 [=14= 访问元素] 除了对象具有 length
属性之外。
问题似乎是视图仅支持它从 QAbstractItemModel、QStringList、QVariantList 和数字继承的 类,而不支持其他项目。
我在 C++ 端的 QML 中将模型设置为 GridView
时遇到问题。从 documentation 关于在 qml 中将模型设置为 GridView 它说:
If a C++ model class is used, it must be a subclass of QAbstractItemModel or a simple list.
在我的例子中,我的数据是矩阵 (9x9) 中的数字,所以我认为最简单的方法是在我的 QML GridView 中使用简单的整数列表作为模型。我的 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>
一样呢?我的目标是使用整数列表作为 gridview 的模型,但这也让我对字符串感到困惑。
一种可能的解决方案是使用 QVariantList
:
QVariantList test;
test << 1 << 2 << 3 << 4 << 5 << 6 << 7 << 11;
engine.rootContext()->setContextProperty("gridModel", test);
另一方面,QList<int>
和 QList<QString>
以透明方式转换为 QML 数组是有效的,可以验证这一点,因为可以使用 [=14= 访问元素] 除了对象具有 length
属性之外。
问题似乎是视图仅支持它从 QAbstractItemModel、QStringList、QVariantList 和数字继承的 类,而不支持其他项目。