Spec-Zone.ru › Qt 5.15

Тип QML GridView

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

Заявление об импорте: import QtQuick 2.15
Наследует:

Flickable

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

Свойства

  • add : Переход
  • addDisplaced : Переход
  • cacheBuffer : int
  • cellHeight : real
  • cellWidth : real
  • count : int
  • currentIndex : int
  • currentItem : Элемент
  • delegate : Компонент
  • displaced : Переход
  • displayMarginBeginning : int
  • displayMarginEnd : int
  • effectiveLayoutDirection : перечисление
  • flow : перечисление
  • footer : Компонент
  • footerItem : Элемент
  • header : Компонент
  • headerItem : Элемент
  • highlight : Компонент
  • highlightFollowsCurrentItem : bool
  • highlightItem : Элемент
  • highlightMoveDuration : int
  • highlightRangeMode : перечисление
  • keyNavigationEnabled : bool
  • keyNavigationWraps : bool
  • layoutDirection : перечисление
  • model : модель
  • move : Переход
  • moveDisplaced : Переход
  • populate : Переход
  • preferredHighlightBegin : real
  • preferredHighlightEnd : real
  • remove : Переход
  • removeDisplaced : Переход
  • snapMode : перечисление
  • verticalLayoutDirection : перечисление

Присоединенные свойства

  • delayRemove : bool
  • isCurrentItem : bool
  • view : GridView

Присоединенные сигналы

  • add()
  • remove()

Методы

  • forceLayout()
  • int indexAt(real x, real y)
  • Элемент itemAt(real x, real y)
  • Элемент itemAtIndex(int index)
  • moveCurrentIndexDown()
  • moveCurrentIndexLeft()
  • moveCurrentIndexRight()
  • moveCurrentIndexUp()
  • positionViewAtBeginning()
  • positionViewAtEnd()
  • positionViewAtIndex(int index, PositionMode mode)

Подробное описание

GridView отображает данные из моделей, созданных из встроенных типов QML, таких как ListModel и XmlListModel, или пользовательских классов моделей, определенных в C++, которые наследуются от QAbstractListModel.

GridView имеет model, который определяет данные для отображения, и delegate, который определяет, как данные должны быть отображены. Элементы в GridView выстраиваются по горизонтали или вертикали. GridView по своей природе является flickable, так как GridView наследует от Flickable.

Пример использования

Следующий пример показывает определение простой модели списка, определенной в файле под названием ContactModel.qml:

import QtQuick 2.0

ListModel {

    ListElement {
        name: "Jim Williams"
        portrait: "pics/portrait.png"
    }
    ListElement {
        name: "John Brown"
        portrait: "pics/portrait.png"
    }
    ListElement {
        name: "Bill Smyth"
        portrait: "pics/portrait.png"
    }
    ListElement {
        name: "Sam Wise"
        portrait: "pics/portrait.png"
    }
}

Эту модель можно использовать как ContactModel в других файлах QML. Смотрите Модули QML для получения дополнительной информации о создании таких многоразовых компонентов.

Другой компонент может отображать данные этой модели в GridView, как показано в следующем примере, который создает компонент ContactModel для своей модели и Column (содержащий Image и Text элементы) для своего делегата.

import QtQuick 2.0

GridView {
    width: 300; height: 200

    model: ContactModel {}
    delegate: Column {
        Image { source: portrait; anchors.horizontalCenter: parent.horizontalCenter }
        Text { text: name; anchors.horizontalCenter: parent.horizontalCenter }
    }
}

Представление создаст новый делегат для каждого элемента в модели. Обратите внимание, что делегат может напрямую получить доступ к данным модели name и portrait.

Улучшенное представление сетки показано ниже. Делегат визуально улучшен и перемещен в отдельный компонент contactDelegate.

Rectangle {
    width: 300; height: 200

    Component {
        id: contactDelegate
        Item {
            width: grid.cellWidth; height: grid.cellHeight
            Column {
                anchors.fill: parent
                Image { source: portrait; anchors.horizontalCenter: parent.horizontalCenter }
                Text { text: name; anchors.horizontalCenter: parent.horizontalCenter }
            }
        }
    }

    GridView {
        id: grid
        anchors.fill: parent
        cellWidth: 80; cellHeight: 80

        model: ContactModel {}
        delegate: contactDelegate
        highlight: Rectangle { color: "lightsteelblue"; radius: 5 }
        focus: true
    }
}

Текущий выбранный элемент выделен синим Rectangle с использованием свойства highlight, и focus установлено в true для включения навигации по клавиатуре для представления сетки. Само представление сетки является областью фокусировки (подробнее см. Фокус клавиатуры в Qt Quick).

Делегаты создаются по мере необходимости и могут быть уничтожены в любое время. Состояние никогда не должно храниться в делегате.

GridView прикрепляет ряд свойств к корневому элементу делегата, например GridView.isCurrentItem. В следующем примере корневой элемент делегата может напрямую получить доступ к этому присоединённому свойству как GridView.isCurrentItem, в то время как объект дочерний contactInfo должен обратиться к этому свойству как wrapper.GridView.isCurrentItem.

GridView {
    width: 300; height: 200
    cellWidth: 80; cellHeight: 80

    Component {
        id: contactsDelegate
        Rectangle {
            id: wrapper
            width: 80
            height: 80
            color: GridView.isCurrentItem ? "black" : "red"
            Text {
                id: contactInfo
                text: name + ": " + number
                color: wrapper.GridView.isCurrentItem ? "red" : "black"
            }
        }
    }

    model: ContactModel {}
    delegate: contactsDelegate
    focus: true
}

Примечание: Представления не устанавливают свойство clip автоматически. Если представление не ограничено другим элементом или экраном, необходимо установить это свойство в значение true, чтобы ограничить элементы, частично или полностью находящиеся вне представления.

Макеты GridView

Макет элементов в GridView можно контролировать с помощью следующих свойств:

  • flow - определяет, будут ли элементы выстраиваться слева направо (последовательность строк) или сверху вниз (последовательность столбцов). Это значение может быть либо GridView.FlowLeftToRight, либо GridView.FlowTopToBottom.
  • layoutDirection - определяет направление горизонтального макета: выстраиваются ли элементы слева направо или наоборот. Это значение может быть либо Qt.LeftToRight, либо Qt.RightToLeft.
  • verticalLayoutDirection - определяет направление вертикального макета: выстраиваются ли элементы сверху вниз или наоборот. Это значение может быть либо GridView.TopToBottom, либо GridView.BottomToTop.

По умолчанию GridView выстраивается слева направо, а элементы выстраиваются слева направо по горизонтали и сверху вниз по вертикали.

Эти свойства можно комбинировать для создания различных макетов, как показано в таблице ниже. GridView в первой строке имеют значение flow GridView.FlowLeftToRight, но используют различные комбинации горизонтальных и вертикальных направлений макета (определяемых соответственно layoutDirection и verticalLayoutDirection). Аналогично, GridView во второй строке ниже все имеют значение flow GridView.FlowTopToBottom, но используют различные комбинации горизонтальных и вертикальных направлений макета, чтобы выстраивать свои элементы различными способами.

END_OF_DOCUMENT_MARKER
Сетка с направлением потока GridView.FlowLeftToRight
(Г) Слева направо (В) Сверху вниз

(Г) Справа налево (В) Сверху вниз

(Г) Слева направо (В) Снизу вверх

(Г) Справа налево (В) Снизу вверх

Сетка с направлением потока GridView.FlowTopToBottom
(Г) Слева направо (В) Сверху вниз

(Г) Справа налево (В) Сверху вниз

(Г) Слева направо (В) Снизу вверх

(Г) Справа налево (В) Снизу вверх

См. также QML Модели данных, ListView, PathView и Примеры Qt Quick - Виды.

Документация по свойствам

cellHeight : вещественное

Эти свойства содержат ширину и высоту каждой ячейки в сетке.

Размер ячейки по умолчанию составляет 100x100.

displayMarginBeginning : целое

Это свойство позволяет отображать делегаты за пределами геометрии представления.

Если это значение не равно нулю, представление создаст дополнительные делегаты перед началом представления или после конца. Представление создаст столько делегатов, сколько сможет поместить в указанный размер в пикселях.

Например, если в вертикальном представлении высота делегата составляет 20 пикселей, есть 3 столбца, и displayMarginBeginning и displayMarginEnd оба установлены в 40, то будут созданы и отображены 6 делегатов сверху и 6 делегатов снизу.

Значение по умолчанию — 0.

Это свойство предназначено для настройки определённых конфигураций пользовательского интерфейса, а не для повышения производительности. Если вы хотите создать делегаты за пределами геометрии представления для повышения производительности, вам, вероятно, следует использовать свойство cacheBuffer вместо этого.

Это свойство QML было введено в QtQuick 2.3.

highlightRangeMode : перечисление

Эти свойства определяют предпочтительный диапазон выделения (для текущего элемента) в представлении. Значение preferredHighlightBegin должно быть меньше значения preferredHighlightEnd.

Эти свойства влияют на положение текущего элемента при прокрутке представления. Например, если при прокрутке текущий выбранный элемент должен оставаться посередине представления, установите значения preferredHighlightBegin и preferredHighlightEnd на координаты верхнего и нижнего краев, где находился бы средний элемент. Если значение currentItem изменено программно, представление автоматически прокрутится так, чтобы текущий элемент оказался посередине представления. Кроме того, поведение текущего индекса элемента будет происходить независимо от того, существует ли выделение.

Допустимые значения для highlightRangeMode:

  • GridView.ApplyRange - представление пытается поддерживать выделение в пределах диапазона. Однако выделение может выходить за пределы диапазона на концах представления или из-за взаимодействия с мышкой.
  • GridView.StrictlyEnforceRange - выделение никогда не выходит за пределы диапазона. Текущий элемент изменяется, если действие с клавиатуры или мыши приведет к перемещению выделения за пределы диапазона.
  • GridView.NoHighlightRange - это значение по умолчанию.

currentIndex : целое

Свойство currentIndex хранит индекс текущего элемента, а currentItem — текущий элемент. Установка currentIndex в -1 очистит выделение и установит currentItem в null.

Если highlightFollowsCurrentItem равно true, установка любого из этих свойств плавно прокрутит GridView так, чтобы текущий элемент стал видимым.

Обратите внимание, что положение текущего элемента может быть лишь приблизительным до тех пор, пока оно не станет видимым в представлении.

add : Transition

Это свойство хранит переход, который необходимо применить к элементам, добавляемым в представление.

Например, вот представление, в котором указан такой переход:

GridView {
    ...
    add: Transition {
        NumberAnimation { properties: "x,y"; from: 100; duration: 1000 }
    }
}

Всякий раз, когда элемент добавляется в указанное выше представление, элемент будет анимироваться от позиции (100,100) до его конечного положения x,y в представлении в течение одной секунды. Переход применяется только к новым элементам, добавляемым в представление; он не применяется к элементам ниже, которые смещаются добавлением новых элементов. Чтобы анимировать смещённые элементы, установите свойства displaced или addDisplaced.

Дополнительные сведения и примеры использования переходов представлений см. в документации ViewTransition.

Примечание: этот переход не применяется к элементам, созданным при первоначальной загрузке представления или при изменении модели представления model. (В этих случаях применяется переход populate.) Кроме того, этот переход не должен анимировать высоту нового элемента; это вызовет неправильное расположение элементов под новым элементом. Вместо этого высоту можно анимировать в обработчике сигнала onAdd в делегате.

См. также addDisplaced, populate и ViewTransition.

addDisplaced : Transition

Это свойство хранит переход, который необходимо применить к элементам внутри представления, которые смещаются при добавлении других элементов в представление.

Например, вот представление, в котором указан такой переход:

GridView {
    ...
    addDisplaced: Transition {
        NumberAnimation { properties: "x,y"; duration: 1000 }
    }
}

Всякий раз, когда элемент добавляется в указанное выше представление, все элементы под новым элементом смещаются, что заставляет их перемещаться вниз (или вбок, если ориентация горизонтальная) в представлении. При этом перемещении движение элементов к их новым координатам x, y в представлении будет анимироваться с помощью NumberAnimation в течение одной секунды, как указано. Этот переход не применяется к новому элементу, который был добавлен в представление; для анимации добавленных элементов установите свойство add.

Если элемент смещается несколькими типами операций одновременно, не определено, будет ли применён переход addDisplaced, moveDisplaced или removeDisplaced. Кроме того, если нет необходимости указывать различные переходы в зависимости от того, смещается ли элемент при добавлении, перемещении или удалении, можно вместо этого установить свойство displaced.

Дополнительные сведения и примеры использования переходов представлений см. в документации ViewTransition.

Примечание: этот переход не применяется к элементам, созданным при первоначальной загрузке представления или при изменении модели представления model. В этих случаях применяется переход populate.

См. также displaced, add, populate и ViewTransition.

cacheBuffer : целое

Это свойство определяет, сохраняются ли делегаты за пределами видимой области представления.

Если это значение больше нуля, представление может сохранить столько делегатов, сколько поместится в заданный буфер. Например, если в вертикальном представлении высота делегата составляет 20 пикселей, есть 3 столбца и cacheBuffer установлено в 40, то может быть создано/сохранено до 6 делегатов сверху и 6 делегатов снизу видимой области. Буферизованные делегаты создаются асинхронно, позволяя создавать их в нескольких кадрах и уменьшая вероятность пропуска кадров. Для повышения производительности рисования делегаты за пределами видимой области не отрисовываются.

Значение по умолчанию для этого свойства зависит от платформы, но обычно будет значением, большим нуля. Отрицательные значения игнорируются.

Обратите внимание, что cacheBuffer не является буфером пикселей — он только сохраняет дополнительные созданные делегаты.

Примечание: установка этого свойства не заменяет создание эффективных делегатов. Оно может улучшить плавность поведения прокрутки за счёт дополнительного использования памяти. Чем меньше объектов и связей в делегате, тем быстрее представление можно прокрутить. Важно понимать, что установка cacheBuffer лишь отсрочит проблемы, вызванные медленной загрузкой делегатов, это не решение для такого сценария.

cacheBuffer работает вне любых отступов отображения, заданных свойствами displayMarginBeginning или displayMarginEnd.

count : целое

Это свойство хранит количество элементов в представлении.

delegate : Component

Делегат предоставляет шаблон, определяющий каждый элемент, созданный представлением. Индекс доступен как свойство index. Свойства модели также доступны в зависимости от типа модели данных.

Количество объектов и привязок в делегате напрямую влияет на производительность перелистывания представления. Если это возможно, поместите функциональность, которая не требуется для нормального отображения делегата, в Loader, который может загружать дополнительные компоненты по мере необходимости.

Размер элемента GridView определяется свойствами cellHeight и cellWidth. Он не будет изменять размер элементов на основе размера корневого элемента в делегате.

По умолчанию порядок следования экземпляров делегата равен 1.

Примечание: Делегаты создаются по мере необходимости и могут быть уничтожены в любое время. Состояние никогда не должно храниться в делегате.

displaced : Transition

Это свойство содержит универсальный переход, который должен применяться к элементам, смещенным любой операцией модели, влияющей на представление.

Это удобный способ задания универсального перехода для элементов, смещаемых операциями добавления, перемещения или удаления, без необходимости указывать отдельные свойства addDisplaced, moveDisplaced и removeDisplaced. Например, ниже представлено представление, которое задает переход для смещения:

GridView {
    ...
    displaced: Transition {
        NumberAnimation { properties: "x,y"; duration: 1000 }
    }
}

При добавлении, перемещении или удалении любого элемента в представлении элементы, расположенные под ним, смещаются, в результате чего они перемещаются вниз (или вбок, если ориентация горизонтальная) в представлении. При этом перемещении движение элементов к новым позициям x, y в представлении будет анимировано с помощью NumberAnimation в течение одной секунды, как указано.

Если представление задает этот универсальный переход для смещения, а также определенные addDisplaced, moveDisplaced или removeDisplaced переходы, то при соответствующей операции будет использован более конкретный переход вместо универсального перехода для смещения, при условии, что более конкретный переход не отключен (путем установки enabled в значение false). Если он отключен, применяется универсальный переход для смещения.

Более подробные сведения и примеры использования переходов представления см. в документации ViewTransition.

См. также addDisplaced, moveDisplaced, removeDisplaced и ViewTransition.

effectiveLayoutDirection : перечисление

Это свойство содержит эффективное направление макета сетки.

При использовании присоединенного свойства LayoutMirroring::enabled для локальных макетов, визуальное направление макета сетки будет зеркальным. Однако свойство layoutDirection останется неизменным.

См. также GridView::layoutDirection и LayoutMirroring.

flow : перечисление

Это свойство содержит направление потока сетки.

Возможные значения:

  • GridView.FlowLeftToRight (по умолчанию) - Элементы выстраиваются слева направо, и представление прокручивается вертикально
  • GridView.FlowTopToBottom - Элементы выстраиваются сверху вниз, и представление прокручивается горизонтально

footer : Component

Это свойство содержит компонент, используемый в качестве подвала.

Экземпляр компонента подвала создаётся для каждого представления. Подвал размещается в конце представления, после всех элементов. Значение по умолчанию порядка следования для подвала — 1.

См. также header и footerItem.

footerItem : Item

Содержит элемент подвала, созданный из компонента footer.

Экземпляр компонента подвала создаётся для каждого представления. Подвал размещается в конце представления, после всех элементов. Значение по умолчанию порядка следования для подвала — 1.

См. также footer и headerItem.

header : Component

Это свойство содержит компонент, используемый в качестве заголовка.

Экземпляр компонента заголовка создаётся для каждого представления. Заголовок размещается в начале представления, перед всеми элементами. Значение по умолчанию порядка следования для заголовка — 1.

См. также footer и headerItem.

headerItem : Item

Содержит элемент заголовка, созданный из компонента header.

Экземпляр компонента заголовка создаётся для каждого представления. Заголовок размещается в начале представления, перед всеми элементами. Значение по умолчанию порядка следования для заголовка — 1.

См. также header и footerItem.

highlight : Component

Это свойство содержит компонент, используемый в качестве выделения.

Экземпляр компонента выделения создаётся для каждого представления. Геометрия созданного экземпляра компонента будет управляться представлением, чтобы оставаться с текущим элементом, если свойство highlightFollowsCurrentItem не равно false. Значение по умолчанию порядка следования для элемента выделения — 0.

См. также highlightItem и highlightFollowsCurrentItem.

highlightFollowsCurrentItem : bool

Это свойство устанавливает, управляется ли выделение представлением.

Если это свойство имеет значение true (значение по умолчанию), выделение плавно перемещается для следования за текущим элементом. В противном случае выделение не перемещается представлением, и любое перемещение должно быть реализовано выделением.

Вот выделение с его движением, определённым элементом SpringAnimation:

Component {
    id: highlight
    Rectangle {
        width: view.cellWidth; height: view.cellHeight
        color: "lightsteelblue"; radius: 5
        x: view.currentItem.x
        y: view.currentItem.y
        Behavior on x { SpringAnimation { spring: 3; damping: 0.2 } }
        Behavior on y { SpringAnimation { spring: 3; damping: 0.2 } }
    }
}

GridView {
    id: view
    width: 300; height: 200
    cellWidth: 80; cellHeight: 80

    model: ContactModel {}
    delegate: Column {
        Image { source: portrait; anchors.horizontalCenter: parent.horizontalCenter }
        Text { text: name; anchors.horizontalCenter: parent.horizontalCenter }
    }

    highlight: highlight
    highlightFollowsCurrentItem: false
    focus: true
}

highlightItem : Item

Содержит элемент выделения, созданный из компонента highlight.

Элемент highlightItem управляется представлением, если highlightFollowsCurrentItem не установлен в false. Значение по умолчанию порядка следования для элемента выделения — 0.

См. также highlight и highlightFollowsCurrentItem.

highlightMoveDuration : int

Это свойство содержит длительность анимации перемещения делегата выделения.

highlightFollowsCurrentItem должно быть true, чтобы это свойство имело эффект.

Значение по умолчанию для длительности составляет 150 мс.

См. также highlightFollowsCurrentItem.

keyNavigationEnabled : bool

Это свойство указывает, включена ли навигация по сетке с помощью клавиш.

Если это значение true, пользователь может перемещаться по представлению с помощью клавиатуры. Это полезно для приложений, которые должны избирательно включать или отключать взаимодействие с помощью мыши и клавиатуры.

По умолчанию значение этого свойства привязано к interactive, чтобы обеспечить совместимость поведения для существующих приложений. При явном задании это привязка к свойству interactive прекращается.

Это свойство было добавлено в Qt 5.7.

См. также interactive.

keyNavigationWraps : bool

Это свойство указывает, оборачивается ли навигация по сетке с помощью клавиш.

Если это значение true, навигация по клавишам, которая переместит текущую выделенную строку за один из концов представления, вместо этого зациклится и переместит выделение на другой конец представления.

По умолчанию навигация по клавишам не зацикливается.

layoutDirection : перечисление

Это свойство содержит направление макета сетки.

Возможные значения:

  • Qt.LeftToRight (по умолчанию) - Элементы будут выстраиваться, начиная с верхнего левого угла. Поток зависит от свойства GridView::flow.
  • Qt.RightToLeft - Элементы будут выстраиваться, начиная с верхнего правого угла. Поток зависит от свойства GridView::flow.

Примечание: Если GridView::flow установлено в GridView.FlowLeftToRight, это не следует путать с тем, если GridView::layoutDirection установлено в Qt.RightToLeft. Значение GridView.FlowLeftToRight просто указывает, что поток горизонтальный.

См. также GridView::effectiveLayoutDirection и GridView::verticalLayoutDirection.

model : model

Это свойство содержит модель, предоставляющую данные для сетки.

Модель предоставляет набор данных, используемых для создания элементов в представлении. Модели могут быть созданы непосредственно в QML с помощью ListModel, XmlListModel, DelegateModel или ObjectModel, или предоставляться классами моделей C++. Если используется класс модели C++, он должен быть подклассом QAbstractItemModel или простым списком.

См. также Модели данных.

move : Transition

Это свойство содержит переход, применяемый к элементам в представлении, перемещаемым в результате операции перемещения в модели представления model.

Например, вот представление, которое задаёт такой переход:

GridView {
    ...
    move: Transition {
        NumberAnimation { properties: "x,y"; duration: 1000 }
    }
}

Всякий раз, когда model выполняет операцию перемещения для перемещения определённого набора индексов, соответствующие элементы в представлении будут анимированы до своих новых позиций в представлении в течение одной секунды. Переход применяется только к элементам, являющимся объектом операции перемещения в модели; он не применяется к элементам ниже них, которые смещены операцией перемещения. Для анимации смещённых элементов установите свойства displaced или moveDisplaced.

Подробнее о применении переходов для представлений и примерах см. в документации ViewTransition.

См. также moveDisplaced и ViewTransition.

moveDisplaced : Transition

Это свойство содержит переход, применяемый к элементам, смещённым операцией перемещения в модели представления model.

Например, вот представление, которое задаёт такой переход:

GridView {
    ...
    moveDisplaced: Transition {
        NumberAnimation { properties: "x,y"; duration: 1000 }
    }
}

Всякий раз, когда model выполняет операцию перемещения для перемещения определённого набора индексов, элементы между исходным и целевым индексами операции перемещения смещаются, заставляя их перемещаться вверх или вниз (или вбок, если ориентация горизонтальная) в представлении. При этом перемещении движение элементов в их новые позиции x,y в представлении будет анимировано с помощью NumberAnimation в течение одной секунды, как указано. Этот переход не применяется к элементам, которые фактически являются объектом операции перемещения; для анимации перемещаемых элементов установите свойство move.

Если элемент смещается несколькими типами операций одновременно, не определено, будет ли применяться переход addDisplaced, moveDisplaced или removeDisplaced. Кроме того, если нет необходимости указывать разные переходы в зависимости от того, смещается ли элемент операцией добавления, перемещения или удаления, можно установить свойство displaced вместо этого.

Подробнее о применении переходов для представлений и примерах см. в документации ViewTransition.

См. также displaced, move и ViewTransition.

populate : Transition

Это свойство содержит переход, применяемый к элементам, которые изначально создаются для представления.

Он применяется ко всем элементам, которые создаются, когда:

  • Представление создаётся впервые
  • Модель представления model изменяется таким образом, что видимые делегаты полностью заменяются
  • Модель представления model сброшена, если модель является подклассом QAbstractItemModel

Например, вот представление, которое задаёт такой переход:

GridView {
    ...
    populate: Transition {
        NumberAnimation { properties: "x,y"; duration: 1000 }
    }
}

При инициализации представления представление создаст все необходимые элементы для представления, а затем анимирует их до правильных позиций в представлении в течение одной секунды.

Однако при прокрутке представления позднее переход populate не выполняется, даже если делегаты создаются по мере их появления. При изменении модели таким образом, что новые делегаты становятся видимыми, применяется переход add. Поэтому не следует полагаться на переход populate для инициализации свойств в делегате, так как он не применяется ко всем делегатам. Если ваша анимация задаёт значение to свойства, свойство должно иметь значение to, а анимация должна задать значение from в случае анимации:

GridView {
    ...
    delegate: Rectangle {
        opacity: 1 // not necessary because it's the default; but don't set 0
        ...
    }
    populate: Transition {
        NumberAnimation { property: "opacity"; from: 0; to: 1; duration: 1000 }
    }
}

Подробнее о применении переходов для представлений и примерах см. в документации ViewTransition.

См. также add и ViewTransition.

remove : Transition

Это свойство содержит переход, применяемый к элементам, удаляемым из представления.

Например, вот представление, которое задаёт такой переход:

GridView {
    ...
    remove: Transition {
        ParallelAnimation {
            NumberAnimation { property: "opacity"; to: 0; duration: 1000 }
            NumberAnimation { properties: "x,y"; to: 100; duration: 1000 }
        }
    }
}

Всякий раз, когда элемент удаляется из представления выше, элемент будет анимирован до позиции (100,100) в течение одной секунды, а параллельно также изменит свою непрозрачность на 0. Переход применяется только к элементам, удаляемым из представления; он не применяется к элементам ниже них, которые смещаются из-за удаления элементов. Для анимации смещённых элементов установите свойства displaced или removeDisplaced.

Обратите внимание, что к моменту применения перехода элемент уже был удалён из модели; любые ссылки на данные модели для удалённого индекса будут недействительны.

Кроме того, если для элемента делегата установлено присоединённое свойство delayRemove, переход remove не будет применён до тех пор, пока delayRemove не станет снова false.

Подробнее о применении переходов для представлений и примерах см. в документации ViewTransition.

См. также removeDisplaced и ViewTransition.

removeDisplaced : Transition

Это свойство содержит переход, применяемый к элементам в представлении, которые смещаются из-за удаления других элементов в представлении.

Например, вот представление, которое задаёт такой переход:

GridView {
    ...
    removeDisplaced: Transition {
        NumberAnimation { properties: "x,y"; duration: 1000 }
    }
}

Всякий раз, когда элемент удаляется из представления выше, все элементы под ним смещаются, заставляя их перемещаться вверх (или вбок, если ориентация горизонтальная) в представлении. При этом перемещении движение элементов в их новые позиции x,y в представлении будет анимировано с помощью NumberAnimation в течение одной секунды, как указано. Этот переход не применяется к элементу, который фактически был удалён из представления; для анимации удалённых элементов установите свойство remove.

Если элемент смещается несколькими типами операций одновременно, не определено, будет ли применяться переход addDisplaced, moveDisplaced или removeDisplaced. Кроме того, если нет необходимости указывать разные переходы в зависимости от того, смещается ли элемент операцией добавления, перемещения или удаления, можно установить свойство displaced вместо этого.

Подробнее о применении переходов для представлений и примерах см. в документации ViewTransition.

См. также displaced, remove и ViewTransition.

snapMode : перечисление

Это свойство определяет, как представление прокрутки будет останавливаться после перетаскивания или быстрого движения. Возможные значения:

  • GridView.NoSnap (по умолчанию) - представление останавливается где угодно в видимой области.
  • GridView.SnapToRow - представление останавливается с выровненной строкой (или столбцом для GridView.FlowTopToBottom потока) в начале представления.
  • GridView.SnapOneRow - представление остановится не более чем на одной строке (или столбце для GridView.FlowTopToBottom потока) от первой видимой строки в момент отпускания кнопки мыши. Этот режим особенно полезен для перемещения по одной странице за раз.

verticalLayoutDirection : перечисление

Это свойство содержит вертикальное направление компоновки сетки.

Возможные значения:

  • GridView.TopToBottom (по умолчанию) - элементы располагаются сверху вниз по представлению.
  • GridView.BottomToTop - элементы располагаются снизу вверх по представлению.

См. также GridView::layoutDirection.

Документация по присоединённым свойствам

GridView.delayRemove : bool

Это присоединённое свойство указывает, может ли быть уничтожен делегат. Оно присоединяется к каждому экземпляру делегата. Значение по умолчанию — false.

Иногда необходимо отложить уничтожение элемента до завершения анимации. Приведенный ниже пример делегата гарантирует, что анимация завершится до удаления элемента из списка.

Component {
    id: delegate
    Item {
        GridView.onRemove: SequentialAnimation {
            PropertyAction { target: wrapper; property: "GridView.delayRemove"; value: true }
            NumberAnimation { target: wrapper; property: "scale"; to: 0; duration: 250; easing.type: Easing.InOutQuad }
            PropertyAction { target: wrapper; property: "GridView.delayRemove"; value: false }
        }
    }
}

Если указана транзиция remove, она не будет применена, пока delayRemove не вернётся к значению false.

GridView.isCurrentItem : bool

Это присоединённое свойство имеет значение true, если этот делегат является текущим элементом; иначе false.

Оно прикрепляется к каждому экземпляру делегата.

GridView.view : GridView

Это присоединённое свойство содержит представление, управляющее этим экземпляром делегата.

Оно прикрепляется к каждому экземпляру делегата, а также к делегатам заголовка, подвала и выделения.

GridView {
    width: 300; height: 200
    cellWidth: 80; cellHeight: 80

    Component {
        id: contactsDelegate
        Rectangle {
            id: wrapper
            width: 80
            height: 80
            color: GridView.isCurrentItem ? "black" : "red"
            Text {
                id: contactInfo
                text: name + ": " + number
                color: wrapper.GridView.isCurrentItem ? "red" : "black"
            }
        }
    }

    model: ContactModel {}
    delegate: contactsDelegate
    focus: true
}

Документация по присоединённым сигналам

add()

Этот присоединённый сигнал генерируется сразу после добавления элемента в представление.

Примечание: Соответствующий обработчик — onAdd.

remove()

Этот присоединённый сигнал генерируется непосредственно перед удалением элемента из представления.

Если указана транзиция remove, она применяется после обработки этого сигнала, при условии, что delayRemove имеет значение false.

Примечание: Соответствующий обработчик — onRemove.

Документация по методам

positionViewAtBeginning()

Позиционирует представление в начале или конце, учитывая заголовок и подвал.

Не рекомендуется использовать contentX или contentY для позиционирования представления по определенному индексу. Это ненадежно, так как удаление элементов из начала списка не приводит к перепозиционированию всех остальных элементов, и фактическое начало представления может изменяться в зависимости от размера делегатов.

Примечание: методы следует вызывать только после завершения компонента. Для позиционирования представления при запуске этот метод должен вызываться методом Component.onCompleted. Например, чтобы позиционировать представление в конце при запуске:

Component.onCompleted: positionViewAtEnd()

forceLayout()

Реакция на изменения в модели обычно происходит пакетно только один раз за кадр. Это означает, что внутри блоков сценариев возможно изменение базовой модели, но представление GridView ещё не успело обновиться.

Этот метод заставляет представление GridView немедленно отреагировать на любые ожидающие изменения в модели.

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

Этот метод был добавлен в Qt 5.1.

int indexAt(real x, real y)

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

Если элемент находится за пределами видимой области, возвращается -1, независимо от того, будет ли элемент существовать в этой точке при прокрутке.

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

Item itemAt(real x, real y)

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

Если элемент находится за пределами видимой области, возвращается null, независимо от того, будет ли элемент существовать в этой точке при прокрутке.

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

Item itemAtIndex(int index)

Возвращает элемент для index. Если элемента для этого индекса нет, например, потому что он ещё не создан или потому что он был перемещен за пределы видимой области и удален из кэша, возвращается null.

Примечание: этот метод следует вызывать только после завершения компонента. Возвращаемое значение также не следует сохранять, так как оно может стать null, как только управление выйдет за пределы области вызова, если представление освободит этот элемент.

Этот метод был добавлен в Qt 5.13.

moveCurrentIndexDown()

Перемещает текущий индекс вниз на один элемент в представлении. Текущий индекс будет переходить, если keyNavigationWraps имеет значение true и он находится в конце. Этот метод не имеет эффекта, если count равен нулю.

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

moveCurrentIndexLeft()

Перемещает текущий индекс влево на один элемент в представлении. Текущий индекс будет переходить, если keyNavigationWraps имеет значение true и он находится в конце. Этот метод не имеет эффекта, если count равен нулю.

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

moveCurrentIndexRight()

Перемещает текущий индекс вправо на один элемент в представлении. Текущий индекс будет переходить, если keyNavigationWraps имеет значение true и он находится в конце. Этот метод не имеет эффекта, если count равен нулю.

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

moveCurrentIndexUp()

Перемещает текущий индекс вверх на один элемент в представлении. Текущий индекс будет переходить, если keyNavigationWraps имеет значение true и он находится в конце. Этот метод не имеет эффекта, если count равен нулю.

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

positionViewAtIndex(int index, PositionMode mode)

Позиционирует представление таким образом, что index находится в позиции, заданной mode:

  • GridView.Beginning - помещает элемент в верхнюю (или левую для GridView.FlowTopToBottom расположения) часть представления.
  • GridView.Center - помещает элемент в центр представления.
  • GridView.End - помещает элемент в нижнюю (или правую для горизонтальной ориентации) часть представления.
  • GridView.Visible - если любая часть элемента видна, то не предпринимать никаких действий, иначе вывести элемент в область просмотра.
  • GridView.Contain - обеспечить видимость всего элемента. Если элемент больше представления, элемент позиционируется в верхней (или левой для GridView.FlowTopToBottom расположения) части представления.
  • GridView.SnapPosition - позиционирует элемент в preferredHighlightBegin. Этот режим допустим только если highlightRangeMode равен StrictlyEnforceRange или если включено привязывание с помощью snapMode.

Если позиционирование представления по индексу приведет к появлению пустого пространства в начале или конце представления, представление будет позиционировано на границе.

Не рекомендуется использовать contentX или contentY для позиционирования представления по определённому индексу. Это ненадежно, так как удаление элементов из начала представления не приводит к перепозиционированию всех остальных элементов. Правильный способ вывода элемента в область просмотра — positionViewAtIndex.

Примечание: методы следует вызывать только после завершения компонента. Для позиционирования представления при запуске этот метод должен вызываться методом Component.onCompleted. Например, для позиционирования представления в конце:

Component.onCompleted: positionViewAtIndex(count - 1, GridView.Beginning)

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.15/qml-qtquick-gridview.html

Spec-Zone.ru

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