Spec-Zone.ru › Qt 5.14

Тип QML PathView

Выравнивает элементы, предоставляемые моделью, по пути. Подробнее...

Оператор импорта: import QtQuick 2.14
Наследуется от:

Item

  • Список всех членов, включая наследуемые

Свойства

  • 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

Сигналы

  • dragEnded()
  • dragStarted()
  • flickEnded()
  • flickStarted()
  • movementEnded()
  • movementStarted()

Методы

  • 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_MARKER

delegate : 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()

Увеличивает текущий индекс.

Примечание: методы следует вызывать только после завершения компонента.

int indexAt(x, real y)

Возвращает индекс элемента, содержащего точку x, y в координатах содержимого. Если в указанной точке нет элемента, возвращается -1.

Примечание: методы следует вызывать только после завершения компонента.

Item itemAt(x, real y)

Возвращает элемент, содержащий точку 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API