Тип QML PathView
Выводит элементы, предоставляемые моделью, по траектории. Подробнее...
| Оператор импорта: | import QtQuick 2.0 |
| Наследует: |
Свойства
- 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 : модель
- movementDirection : перечисление
- moving : bool
- offset : real
- path : Path
- pathItemCount : int
- preferredHighlightBegin : real
- preferredHighlightEnd : real
- snapMode : перечисление
Прикрепленные свойства
- isCurrentItem : bool
- onPath : bool
- view : PathView
Сигналы
Методы
- decrementCurrentIndex()
- incrementCurrentIndex()
- int indexAt(real x, real y)
- Item itemAt(real x, real y)
- positionViewAtIndex(int index, PositionMode mode)
Подробное описание
PathView отображает данные из моделей, созданных из встроенных типов QML, таких как ListModel и XmlListModel, или пользовательских классов моделей, определённых на C++, которые наследуют от QAbstractListModel.
У представления есть model, который определяет данные для отображения, и delegate, который определяет, как данные должны быть отображены. delegate экземплицируется для каждого элемента на path. Элементы могут быть пролистываемы.
Например, если есть простая модель списка, определённая в файле 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.
См. также Path, 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.
См. также Модели данных.
[since 5.7] 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(int 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-6.0/qml-qtquick-pathview.html