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++ и в C++. Фактически, любой массив 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++ и в C++. Фактически, любой массив JavaScript может быть преобразован обратно в QItemSelection, при этом объекты, не являющиеся QItemSelectionRange, заменяются пустыми QItemSelectionRange.
См. также ItemSelectionModel.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qmodelindex-and-related-classes-in-qml.html