QModelIndex и связанные классы в QML
Начиная с Qt 5.5, QModelIndex и QPersistentModelIndex доступны в QML в качестве типов со значениями. Также аналогичным образом доступны QModelIndexList, QItemSelectionRange и QItemSelection. Все объекты этих типов могут передаваться между QML и C++ в качестве var свойств или простых JavaScript переменных.
Ниже приведён обзор API, экспонированного для QML для этих классов. Для получения дополнительной информации, обратитесь к документации C++.
Примечание: Поскольку все эти типы экспонированы как гаджеты, сигналы уведомления о изменении свойств не излучаются. Поэтому привязка к их свойствам может не дать ожидаемых результатов. Это особенно актуально для QPersistentModelIndex.
Типы QModelIndex и QPersistentModelIndex
- row : int
- column : int
- parent : QModelIndex
- valid : bool
- model : QAbstractItemModel
- internalId : quint64
Все эти свойства являются только для чтения, как и их аналоги в C++.
Примечание: Применимы обычные замечания к QModelIndex в QML. Если базовая модель изменяется или удаляется, доступ к её свойствам может стать небезопасным. Поэтому не следует хранить объекты QModelIndex. Однако можно безопасно хранить объекты QPersistentModelIndexe.
Тип QModelIndexList
QModelIndexList экспонируется в QML как массив JavaScript. Преобразования автоматически выполняются между C++ и QML. Фактически, любой массив JavaScript может быть преобразован обратно в QModelIndexList, при этом объекты, не являющиеся QModelIndex, заменяются недействительными QModelIndex.
Примечание: Преобразование QModelIndex в QPersistentModelIndex происходит при обращении к элементам массива, так как свойство QModelIndexList сохраняет семантику ссылок, когда экспонируется таким образом.
Тип 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. Преобразования автоматически выполняются между C++ и QML. Фактически, любой массив JavaScript может быть преобразован обратно в QItemSelection, при этом объекты, не являющиеся QItemSelectionRange, заменяются пустыми QItemSelectionRange.
См. также ItemSelectionModel.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.2/qmodelindex-and-related-classes-in-qml.html