Тип QML PathView
Выравнивает элементы, предоставляемые моделью, по пути. Подробнее...
| Оператор импорта: | import QtQuick 2.14 |
| Наследуется от: |
Свойства
- cacheItemCount : int
- count : int
- currentIndex : int
- currentItem : Item
- delegate : Component
- dragMargin : real
- dragging : bool
- flickDeceleration : real
- flicking : bool
- highlight : Component
- highlightItem : Item
- highlightMoveDuration : int
- highlightRangeMode : перечисление
- interactive : bool
- maximumFlickVelocity : real
- model : model
- movementDirection : перечисление
- moving : bool
- offset : real
- path : Путь
- pathItemCount : int
- preferredHighlightBegin : real
- preferredHighlightEnd : real
- snapMode : перечисление
Присоединённые свойства
- isCurrentItem : bool
- onPath : bool
- view : PathView
Сигналы
Методы
- decrementCurrentIndex()
- incrementCurrentIndex()
- int indexAt(x, real y)
- Item itemAt(x, real y)
- positionViewAtIndex(index, PositionMode mode)
Подробное описание
PathView отображает данные из моделей, созданных из встроенных типов QML, таких как ListModel и XmlListModel, или пользовательских классов моделей, определённых в C++, которые наследуются от QAbstractListModel.
У представления есть model, который определяет данные, которые нужно отобразить, и delegate, который определяет, как данные должны отображаться. delegate создаётся для каждого элемента на пути. Элементы можно перемещать по пути с помощью свайпа.
Например, если в файле ContactModel.qml определена простая модель списка, как это:
import QtQuick 2.0
ListModel {
ListElement {
name: "Bill Jones"
icon: "pics/qtlogo.png"
}
ListElement {
name: "Jane Doe"
icon: "pics/qtlogo.png"
}
ListElement {
name: "John Smith"
icon: "pics/qtlogo.png"
}
} Эти данные можно представить как PathView, например так:
import QtQuick 2.0
Rectangle {
width: 240; height: 200
Component {
id: delegate
Column {
id: wrapper
opacity: PathView.isCurrentItem ? 1 : 0.5
Image {
anchors.horizontalCenter: nameText.horizontalCenter
width: 64; height: 64
source: icon
}
Text {
id: nameText
text: name
font.pointSize: 16
}
}
}
PathView {
anchors.fill: parent
model: ContactModel {}
delegate: delegate
path: Path {
startX: 120; startY: 100
PathQuad { x: 120; y: 25; controlX: 260; controlY: 75 }
PathQuad { x: 120; y: 100; controlX: -20; controlY: 75 }
}
}
}
(В приведенном выше примере используется PathAttribute для изменения масштаба и непрозрачности элементов по мере их вращения. Этот дополнительный код можно увидеть в документации PathAttribute.)
PathView не обрабатывает навигацию с клавиатуры автоматически. Это связано с тем, что клавиши для навигации будут зависеть от формы пути. Навигацию можно довольно просто добавить, установив focus на true и вызвав decrementCurrentIndex() или incrementCurrentIndex(), например, для навигации с помощью клавиш влево и вправо:
PathView {
// ...
focus: true
Keys.onLeftPressed: decrementCurrentIndex()
Keys.onRightPressed: incrementCurrentIndex()
} Само представление пути является областью фокусировки (см. Фокус клавиатуры в Qt Quick для получения дополнительной информации).
Делегаты создаются по мере необходимости и могут быть уничтожены в любое время. Состояние никогда не должно храниться в делегате.
PathView прикрепляет ряд свойств к корневому элементу делегата, например, PathView.isCurrentItem. В следующем примере корневой элемент делегата может напрямую получить доступ к этому присоединённому свойству как PathView.isCurrentItem, а объект дочерний nameText должен обратиться к этому свойству как wrapper.PathView.isCurrentItem.
Component {
id: delegate
Column {
id: wrapper
opacity: PathView.isCurrentItem ? 1 : 0.5
Image {
anchors.horizontalCenter: nameText.horizontalCenter
width: 64; height: 64
source: icon
}
Text {
id: nameText
text: name
font.pointSize: 16
}
}
} Примечание, что представления не включают обрезку автоматически. Если представление не обрезается другим элементом или экраном, необходимо установить clip: true, чтобы правильно обрезать элементы, которые выходят за пределы видимой области.
См. также Путь, QML Модели данных, ListView, GridView и Примеры Qt Quick - Представления.
Документация по свойствам
highlightRangeMode : перечисление
Эти свойства устанавливают предпочтительный диапазон выделения (текущего элемента) в представлении. Предпочтительные значения должны находиться в диапазоне от 0 до 1.
Допустимые значения для highlightRangeMode:
- PathView.NoHighlightRange - диапазон не применяется, и выделение будет свободно перемещаться в представлении.
- PathView.ApplyRange - представление будет пытаться поддерживать выделение в диапазоне, однако выделение может перемещаться за пределы диапазона в конце пути или из-за взаимодействия с мышкой.
- PathView.StrictlyEnforceRange - выделение никогда не выйдет за пределы диапазона. Это означает, что текущий элемент изменится, если действие с клавиатуры или мышью приведет к перемещению выделения за пределы диапазона.
Значение по умолчанию - PathView.StrictlyEnforceRange.
Определение диапазона выделения - это правильный способ повлиять на то, где оказывается текущий элемент при перемещении представления. Например, если вы хотите, чтобы текущий выбранный элемент был посередине пути, установите диапазон выделения 0,5, 0,5 и highlightRangeMode на PathView.StrictlyEnforceRange. Затем, при прокрутке пути, текущий выбранный элемент будет элементом в этой позиции. Это также относится к изменению текущего выбранного элемента - он будет прокручиваться до предпочтительного диапазона выделения. Кроме того, поведение индекса текущего элемента будет происходить независимо от того, существует ли выделение.
Примечание: Для валидного диапазона preferredHighlightEnd должно быть больше или равно preferredHighlightBegin.
cacheItemCount : int
Это свойство содержит максимальное количество элементов для кеширования за пределами пути.
Например, PathView с моделью, содержащей 20 элементов, pathItemCount 10 и cacheItemCount 4 создаст до 14 элементов, из которых 10 будут видны на пути, а 4 - невидимые кэшированные элементы.
Кэшированные делегаты создаются асинхронно, что позволяет создавать их в разные кадры и уменьшает вероятность пропуска кадров.
Примечание: Установка этого свойства не заменяет создание эффективных делегатов. Это может улучшить плавность поведения прокрутки за счёт дополнительного использования памяти. Чем меньше объектов и связей в делегате, тем быстрее можно прокрутить представление. Важно понимать, что установка cacheItemCount только отсрочит проблемы, вызванные медленным загрузкой делегатов, это не решение для этого сценария.
См. также pathItemCount.
count : int
Это свойство содержит количество элементов в модели.
currentIndex : int
Это свойство содержит индекс текущего элемента.
currentItem : Item
Это свойство содержит текущий элемент в представлении.
END_OF_DOCUMENT_MARKERdelegate : Component
Делегат предоставляет шаблон, определяющий каждый элемент, создаваемый представлением. Индекс показан как доступное index свойство. Свойства модели также доступны в зависимости от типа модели данных.
Количество объектов и связей в делегате оказывает прямое влияние на производительность перетаскивания представления, когда задано pathItemCount. Если возможно, поместите функциональность, не необходимую для нормального отображения делегата, в Loader, который может загружать дополнительные компоненты по мере необходимости.
Обратите внимание, что PathView будет выстраивать элементы на основе размера корневого элемента в делегате.
Вот пример делегата:
Component {
id: delegate
Column {
id: wrapper
opacity: PathView.isCurrentItem ? 1 : 0.5
Image {
anchors.horizontalCenter: nameText.horizontalCenter
width: 64; height: 64
source: icon
}
Text {
id: nameText
text: name
font.pointSize: 16
}
}
} dragMargin : real
Это свойство содержит максимальное расстояние от пути, инициирующего перетаскивание мышью.
По умолчанию путь можно перетащить только щелчком по элементу. Если dragMargin больше нуля, перетаскивание можно инициировать щелчком в пределах dragMargin пикселей от пути.
dragging : bool
Это свойство указывает, перемещается ли в данный момент представление из-за перетаскивания пользователем.
flickDeceleration : real
Это свойство содержит скорость, с которой замедляется движение после броска.
Значение по умолчанию равно 100.
flicking : bool
Это свойство указывает, перемещается ли в данный момент представление из-за броска пользователем.
highlight : Component
Это свойство содержит компонент, используемый для выделения.
Экземпляр компонента выделения будет создан для каждого представления. Геометрия экземпляра результирующего компонента будет управляться представлением, чтобы оставаться с текущим элементом.
Ниже приведен пример, демонстрирующий, как создать простое выделение. Обратите внимание на использование присоединенного свойства PathView.onPath, чтобы гарантировать, что выделение скрыто, когда оно отброшено с пути.
Component {
Rectangle {
visible: PathView.onPath
// ...
}
} См. также highlightItem и highlightRangeMode.
highlightItem : Item
highlightItem содержит элемент выделения, созданный из компонента highlight.
См. также highlight.
highlightMoveDuration : int
Это свойство содержит длительность анимации перемещения делегата выделения.
Если highlightRangeMode — StrictlyEnforceRange, это свойство определяет скорость перемещения элементов по пути.
Значение по умолчанию для длительности — 300 мс.
interactive : bool
Пользователь не может перетаскивать или бросать PathView, который не является интерактивным.
Это свойство полезно для временного отключения броска. Это позволяет выполнять особую обработку взаимодействия с PathView и его дочерними элементами.
maximumFlickVelocity : real
Это свойство содержит приблизительную максимальную скорость броска представления в пикселях в секунду.
Значение по умолчанию зависит от платформы.
model : model
Это свойство содержит модель, предоставляющую данные для представления.
Модель предоставляет набор данных, используемых для создания элементов для представления. Для больших или динамических наборов данных модель обычно предоставляется объектом модели C++. Модели также могут быть созданы непосредственно в QML, используя тип ListModel.
Примечание: изменение модели сбросит смещение и currentIndex до 0.
См. также модели данных.
movementDirection : enumeration
Это свойство определяет направление, в котором элементы перемещаются при установке текущего индекса. Возможные значения:
-
PathView.Shortest (по умолчанию) — элементы перемещаются в направлении, требующем наименьшего перемещения, что может быть либо
Negative, либоPositive. - PathView.Negative — элементы перемещаются назад к месту назначения.
- PathView.Positive — элементы перемещаются вперед к месту назначения.
Например, предположим, что в модели есть 5 элементов, и currentIndex равен 0. Если currentIndex устанавливается в 2,
- направление перемещения
Positiveприведет к следующему порядку: 0, 1, 2 - направление перемещения
Negativeприведет к следующему порядку: 0, 5, 4, 3, 2 - направление перемещения
Shortestприведет к тому же порядку, что иPositive.
Примечание: это свойство не влияет на перемещение incrementCurrentIndex() и decrementCurrentIndex().
Это свойство было введено в Qt 5.7.
moving : bool
Это свойство указывает, перемещается ли в данный момент представление из-за перетаскивания или броска пользователем.
offset : real
Смещение указывает, насколько далеко от исходного положения находятся элементы по пути. Это вещественное число, которое варьируется от 0 до количества элементов в модели.
path : Path
Это свойство содержит путь, используемый для выстраивания элементов. Дополнительную информацию см. в документации по Path.
pathItemCount : int
Это свойство содержит количество элементов, видимых на пути одновременно.
Указание pathItemCount как undefined отобразит все элементы на пути.
snapMode : enumeration
Это свойство определяет, как элементы будут останавливаться после перетаскивания или броска. Возможные значения:
- PathView.NoSnap (по умолчанию) — элементы останавливаются где угодно на пути.
- PathView.SnapToItem — элементы останавливаются с выровненным элементом по preferredHighlightBegin.
- PathView.SnapOneItem — элементы останавливаются не более чем в одном элементе от ближайшего элемента к preferredHighlightBegin в момент отпускания нажатия. Этот режим особенно полезен для перемещения по одной странице за раз.
snapMode не влияет на currentIndex. Чтобы обновить currentIndex по мере перемещения представления, установите highlightRangeMode в значение PathView.StrictlyEnforceRange (значение по умолчанию для PathView).
См. также highlightRangeMode.
Документация по присоединенным свойствам
PathView.isCurrentItem : bool
Это присоединенное свойство имеет значение true, если этот делегат является текущим элементом, в противном случае false.
Оно присоединяется к каждому экземпляру делегата.
Это свойство может быть использовано для изменения внешнего вида текущего элемента.
Component {
id: delegate
Column {
id: wrapper
opacity: PathView.isCurrentItem ? 1 : 0.5
Image {
anchors.horizontalCenter: nameText.horizontalCenter
width: 64; height: 64
source: icon
}
Text {
id: nameText
text: name
font.pointSize: 16
}
}
} PathView.onPath : bool
Это присоединенное свойство указывает, находится ли элемент в данный момент на пути.
Если было задано pathItemCount, возможно, что некоторые элементы могут быть созданы, но не считаться в данный момент находящимися на пути. Обычно эти элементы делаются невидимыми, например:
Component {
Rectangle {
visible: PathView.onPath
// ...
}
} Оно присоединяется к каждому экземпляру делегата.
PathView.view : PathView
Это присоединенное свойство содержит представление, управляющее этим экземпляром делегата.
Оно присоединяется к каждому экземпляру делегата.
Документация по сигналам
dragEnded()
Этот сигнал испускается, когда пользователь прекращает перетаскивание представления.
Если скорость перетаскивания достаточна в момент отпускания сенсорного жеста/кнопки мыши, начнется бросок.
Соответствующий обработчик — onDragEnded.
dragStarted()
Этот сигнал испускается, когда представление начинает перетаскиваться из-за взаимодействия пользователя.
Соответствующий обработчик — onDragStarted.
flickEnded()
Этот сигнал испускается, когда представление перестает двигаться из-за броска.
Соответствующий обработчик — onFlickEnded.
flickStarted()
Этот сигнал излучается, когда представление прокручивается. Прокрутка начинается с точки, где мышь или сенсорный экран отпущены, но при этом движение продолжается.
Соответствующий обработчик — onFlickStarted.
movementEnded()
Этот сигнал излучается, когда представление прекращает движение из-за взаимодействия пользователя. Если была запущена прокрутка, этот сигнал будет излучен, как только прокрутка остановится. Если прокрутка не была запущена, этот сигнал будет излучен, когда пользователь перестанет перетаскивать — т.е. когда кнопка мыши или сенсорный экран отпущены.
Соответствующий обработчик — onMovementEnded.
movementStarted()
Этот сигнал излучается, когда представление начинает движение из-за взаимодействия пользователя.
Соответствующий обработчик — onMovementStarted.
Документация методов
decrementCurrentIndex()
Уменьшает текущий индекс.
Примечание: методы следует вызывать только после завершения компонента.
incrementCurrentIndex()
Увеличивает текущий индекс.
Примечание: методы следует вызывать только после завершения компонента.
Возвращает индекс элемента, содержащего точку x, y в координатах содержимого. Если в указанной точке нет элемента, возвращается -1.
Примечание: методы следует вызывать только после завершения компонента.
Возвращает элемент, содержащий точку x, y в координатах содержимого. Если в указанной точке нет элемента, возвращается null.
Примечание: методы следует вызывать только после завершения компонента.
positionViewAtIndex(index, PositionMode mode)
Располагает представление так, чтобы элемент с индексом index находился в позиции, заданной параметром mode:
- PathView.Начало — позиционирует элемент в начале пути.
- PathView.Центр — позиционирует элемент в центре пути.
- PathView.Конец — позиционирует элемент в конце пути.
- PathView.Охватить — гарантирует позиционирование элемента на пути.
- PathView.ТочкаПривязки — позиционирует элемент в точке preferredHighlightBegin. Этот режим допустим только если highlightRangeMode равен StrictlyEnforceRange или привязка включена через snapMode.
Примечание: методы следует вызывать только после завершения компонента. Для позиционирования представления при запуске этот метод следует вызвать из Component.onCompleted. Например, для позиционирования представления в конце:
Component.onCompleted: positionViewAtIndex(count - 1, PathView.End)
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.14/qml-qtquick-pathview.html