QML中的QModelIndex及相关类
自Qt 5.5以来,QModelIndex和QPersistentModelIndex作为基于值的类型在QML中公开。以类似方式公开的还有QModelIndexList、QItemSelectionRange和QItemSelection。这些类型的所有对象都可以作为var
属性或纯JavaScript变量在QML和C++之间来回传递。
以下是对QML公开此类API的概述。有关更多信息,请参阅它们的C++文档。
注意: 由于所有这些类型都公开为小部件,因此不会发出属性更改通知信号。因此,绑定它们的属性可能不会得到预期的结果。特别是对于QPersistentModelIndex。
QModelIndex和QPersistentModelIndex类型
- row : int
- column : int
- parent : QModelIndex
- valid : bool
- model : QAbstractItemModel
- internalId : quint64
所有这些属性都是只读的,与它们的C++对应物相同。此外,我们还公开了以下函数
- QVariant data(int role) (since Qt 6.7)
注意: 在QML中对QModelIndex的通常注意事项。如果底层模型更改或被删除,访问其属性可能变得危险。因此,不应存储任何QModelIndex对象。但是,您可以安全地以这种方式存储QPersistentModelIndex对象。
QModelIndexList类型
QModelIndexList在QML中公开为JavaScript数组。转换会自动在C++之间进行。实际上,任何JavaScript数组都可以转换为QModelIndexList,其中的非QModelIndex对象将被替换为无效的QModelIndex。
注意: 访问数组元素时发生QModelIndex到QPersistentModelIndex的转换,因为以这种方式公开的任何QModelIndex属性都保留引用语义。
QItemSelectionRange类型
- top : int
- left : int
- bottom : int
- right : int
- width : int
- height : int
- topLeft : QPersistentModelIndex
- bottomRight : QPersistentModelIndex
- parent : QModelIndex
- valid : bool
- empty : bool
- model : QAbstractItemModel
所有这些属性都是只读的,与它们的C++对应物相同。此外,我们还公开了以下函数
- bool contains(QModelIndex index)
- bool contains(int row, int column, QModelIndex parentIndex)
- bool intersects(QItemSelectionRange other)
- QItemSelectionRange intersected(QItemSelectionRange other)
QItemSelection 类型
类似于 QModelIndexList,QItemSelection 在 QML 中以 JavaScript 数组的形式暴露 QItemSelectionRange 对象。 conversions 自动从 C++ 实现转换。事实上,任何 JavaScript 数组都可以转换回 QItemSelection,其中非 QItemSelectionRange 对象将被替换为空 QItemSelectionRange。
另请参阅ItemSelectionModel.
© 2024 The Qt Company Ltd. 本文档中的文档贡献是各自所有者的版权。所提供的文档是在免费软件基金会发布的情况下受到 GNU免费文档许可版1.3 的许可。Qt 及其商标是芬兰的 The Qt Company Ltd. 以及世界各地的商标。所有其他商标均为其各自所有者的财产。