GridView QML Type

用于指定模型所提供项目的网格视图。更多

Import Statement: import QtQuick
Inherits:

Flickable

属性

附属物业

附加信号

方法

详细说明

GridView 显示的数据来自内置 QML 类型(如ListModelXmlListModel )创建的模型,或继承自QAbstractListModel 的 C++ 定义的自定义模型类。

GridView 有一个model ,它定义了要显示的数据,还有一个delegate ,它定义了数据的显示方式。网格视图中的项目可以水平或垂直排列。由于 GridView 继承自Flickable ,因此网格视图本质上是可移动的。

使用示例

下面的示例显示了一个简单列表模型的定义,该模型定义在一个名为ContactModel.qml 的文件中:

import QtQuick

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"
    }
}

该模型可在其他 QML 文件中作为ContactModel 引用。有关创建类似可重用组件的更多信息,请参阅QML 模块

另一个组件可在 GridView 中显示该模型数据,如下面的示例,该示例为其模型创建了ContactModel 组件,为其委托创建了Column (包含ImageText 项)。


import QtQuick

GridView {
    width: 300; height: 200

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

视图将为模型中的每个项目创建一个新的委托。请注意,委托可以直接访问模型的nameportrait 数据。

改进后的网格视图如下所示。委托在视觉上得到了改进,并被移到一个单独的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
    }
}

使用highlight 属性,当前选中的项目会以蓝色高亮显示Rectangle ,并将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 中项的布局可由以下属性控制:

  • flow - 控制项目是从左到右(作为一系列行)还是从上到下(作为一系列列)。该值可以是 GridView.FlowLeftToRight 或 GridView.FlowTopToBottom。
  • layoutDirection - GridView.FlowLeftToRight(GridView.FlowLeftToRight)控制水平布局方向:即项目是从视图左侧向右侧布局,还是反之。该值可以是 Qt.LeftToRight 或 Qt.RightToLeft。
  • verticalLayoutDirection - 控制垂直布局方向:即项目是从视图顶部向视图底部布局,还是反之。该值可以是 GridView.TopToBottom 或 GridView.BottomToTop。

默认情况下,GridView 是从左到右流动的,项目是水平方向从左到右、垂直方向从上到下排列的。

如下表所示,这些属性可以组合产生各种布局。第一行中的 GridView 都具有 GridView.FlowLeftToRight 的flow 值,但使用了不同的水平和垂直布局方向组合(分别由layoutDirectionverticalLayoutDirection 指定)。同样,下面第二行中的 GridView 都具有 GridView.FlowTopToBottom 的flow 值,但使用了不同的水平和垂直布局方向组合,以不同的方式布局它们的项目。

使用 GridView.FlowLeftToRight 流程的网格视图
(H)从左到右(V)从上到下

(H)从右到左(V)从上到下

(H)从左至右(V)从下至上

(H)从右到左(V)从下到上

具有 GridView.FlowTopToBottom 流程的网格视图
(H)从左到右(V)从上到下

(H)从右到左(V)从上到下

(H)从左到右(V)从下到上

(H)从右到左(V)从下到上

另请参阅 QML 数据模型ListView,PathViewQt Quick 示例 - 视图

属性文档

currentIndex : int

currentItem : Item [read-only]

currentIndex 属性保存当前项目的索引,currentItem 保存当前项目。将currentIndex 设置为-1 将清除高亮显示,并将currentItem 设置为空。

如果highlightFollowsCurrentItemtrue ,设置这两个属性中的任何一个都将平滑滚动GridView ,使当前项目可见。

请注意,在当前项目在视图中可见之前,其位置可能只是近似值。


highlightRangeMode : enumeration

preferredHighlightBegin : real

preferredHighlightEnd : real

这些属性定义了视图中高亮显示(当前项目)的首选范围。preferredHighlightBegin 值必须小于preferredHighlightEnd 值。

这些属性会影响视图滚动时当前项目的位置。例如,如果当前选中的项目在滚动时应保持在视图的中间位置,则应将preferredHighlightBeginpreferredHighlightEnd 设置为中间项目的上下坐标。如果以编程方式更改currentItem ,视图将自动滚动,使当前项目位于视图中间。此外,无论是否存在高亮显示,当前项目索引的行为都会发生。

highlightRangeMode 的有效值是

常量说明
GridView.ApplyRange视图会尝试将高亮显示保持在该范围内。但是,在视图两端或由于鼠标交互作用,高亮显示可能会超出范围。
GridView.StrictlyEnforceRange高亮显示永远不会超出范围。如果键盘或鼠标操作会导致高亮显示超出范围,则当前项目会发生变化。
GridView.NoHighlightRange默认值

displayMarginBeginning : int [since QtQuick 2.3]

displayMarginEnd : int [since QtQuick 2.3]

此属性允许在视图几何图形之外显示委托。

如果该值不为零,视图将在视图开始前或结束后创建额外的委托。视图将根据指定的像素大小创建尽可能多的委托。

例如,如果在垂直视图中,代表高度为 20 像素,有 3 列,且displayMarginBeginningdisplayMarginEnd 都设置为 40,那么将创建并显示上方 6 个代表和下方 6 个代表。

默认值为 0。

此属性旨在允许某些用户界面配置,而不是作为性能优化。如果出于性能考虑,您希望在视图几何图形之外创建代表,您可能需要使用cacheBuffer 属性。

此 QML 属性在 QtQuick 2.3 中引入。


cellHeight : real

cellWidth : real

这些属性表示网格中每个单元格的宽度和高度。

默认单元格大小为 100x100。


add : Transition

此属性包含应用于添加到视图中的项的过渡。

例如,下面的视图就指定了这种过渡:

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

每当一个项目被添加到上述视图中时,该项目将在一秒钟内从视图中的位置 (100,100) 以动画形式移动到其最终的 x,y 位置。该过渡只适用于添加到视图中的新项目,不适用于因添加新项目而移位的下方项目。要为移位的项目设置动画,请设置displacedaddDisplaced 属性。

有关如何使用视图转换的更多详情和示例,请参阅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,populateViewTransition


cacheBuffer : int

该属性决定是否在视图的可见区域外保留委托。

如果该值大于零,则视图可以在指定的缓冲区内保留尽可能多的实例化委托。例如,如果在垂直视图中,代表高度为 20 像素,有 3 列,且cacheBuffer 设置为 40,那么最多可以在可见区域上方创建/保留 6 个代表,在可见区域下方创建/保留 6 个代表。缓冲委派是异步创建的,允许在多个帧中创建,减少跳帧的可能性。为了提高绘制性能,不绘制可见区域外的代表。

此属性的默认值取决于平台,但通常大于零。负值将被忽略。

请注意,cacheBuffer 并非像素缓冲区,它只维护附加的实例化代表。

注意: 设置此属性不能替代创建高效的委托。它可以提高滚动行为的流畅性,但会增加内存使用量。委托中的对象和绑定越少,视图滚动的速度就越快。重要的是要认识到,设置 cacheBuffer 只能延缓加载缓慢的委托所造成的问题,而不是解决这种情况的办法。

cacheBuffer 在displayMarginBeginningdisplayMarginEnd 指定的显示边距之外运行。


count : int [read-only]

该属性包含模型中的项目数。


delegate : Component

委托提供了一个模板,定义了视图实例化的每个项目。索引作为可访问的index 属性公开。根据数据模型的类型,模型的属性也是可用的。

委托中对象和绑定的数量会直接影响视图的闪烁性能。如果可能,请将正常显示委托时不需要的功能放在Loader 中,以便在需要时加载其他组件。

GridView 的项目大小由cellHeightcellWidth 决定。它不会根据委托中根项目的大小来调整项目的大小。

委托实例的默认stacking order1

注意: 委托按需实例化,可随时销毁。绝不应将状态存储在委托中。


displaced : Transition

此属性包含通用转换,可应用于被任何影响视图的模型操作移位的项目。

该属性便于为被添加、移动或移除操作移位的项指定通用转换,而无需指定单独的addDisplacedmoveDisplacedremoveDisplaced 属性。例如,下面是一个指定了移位过渡的视图:

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

在上述视图中添加、移动或删除任何项目时,其下方的项目都会发生位移,导致它们在视图中向下移动(或横向移动,如果是水平方向)。随着位移的发生,项目在视图中移动到其新 x、y 位置的动画效果将在一秒钟内以NumberAnimation 的形式呈现。

如果视图指定了这种通用位移过渡以及特定的addDisplacedmoveDisplacedremoveDisplaced 过渡,那么在进行相关操作时,将使用更特定的过渡而不是通用位移过渡,前提是更特定的过渡没有被禁用(将enabled 设为 false)。如果确实已禁用,则将使用通用移位转换。

有关如何使用视图转换的更多细节和示例,请参阅ViewTransition 文档。

另请参阅 addDisplaced,moveDisplaced,removeDisplacedViewTransition


effectiveLayoutDirection : enumeration [read-only]

该属性保留网格的有效布局方向。

在本地布局中使用附加属性LayoutMirroring::enabled 时,网格的可视化布局方向将被镜像。但是,属性layoutDirection 将保持不变。

另请参阅 GridView::layoutDirectionLayoutMirroring


flow : enumeration

该属性表示网格的流向。

可能的值:

常量说明
GridView.FlowLeftToRight(默认)项目从左到右排列,视图垂直滚动
GridView.FlowTopToBottom项目从上到下排列,视图水平滚动

该属性包含用作页脚的组件。

每个视图都会创建一个页脚组件实例。页脚位于视图的末尾,任何项目之后。页脚的默认stacking order1

另请参阅 headerfooterItem


footerItem : Item [read-only]

这是由footer 组件创建的页脚项。

每个视图都会创建一个页脚组件实例。页脚位于视图的末尾,在任何项目之后。页脚的默认stacking order1

另请参阅 footerheaderItem


header : Component

该属性包含用作页眉的组件。

每个视图都会创建一个页眉组件实例。页眉位于视图的开头,在任何项目之前。页眉的默认stacking order1

另请参阅 footerheaderItem


headerItem : Item [read-only]

这将保存从header 组件创建的页眉项。

每个视图都会创建一个页眉组件实例。页眉位于视图的开头,在任何项目之前。页眉的默认stacking order1

另请参阅 headerfooterItem


highlight : Component

该属性包含用作高亮显示的组件。

每个视图都会创建一个高亮组件实例。除非highlightFollowsCurrentItem 属性为 false,否则创建的组件实例的几何形状将由视图管理,以便与当前项目保持一致。高亮显示项的默认stacking order0

另请参阅 highlightItemhighlightFollowsCurrentItem


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 [read-only]

这是由highlight 组件创建的高亮项。

除非highlightFollowsCurrentItem 设置为 false,否则 highlightItem 将由视图管理。高亮项的默认stacking order0

另请参阅 highlighthighlightFollowsCurrentItem


highlightMoveDuration : int

该属性保存高亮显示委托的移动动画持续时间。

highlightFollowsCurrentItem 该属性必须为 true 才能生效。

持续时间的默认值为 150ms。

另请参阅 highlightFollowsCurrentItem


keyNavigationEnabled : bool

该属性显示是否启用网格按键导航。

如果设置为true ,用户就可以使用键盘导航视图。这对于需要选择性启用或禁用鼠标和键盘交互的应用程序非常有用。

默认情况下,该属性的值绑定为interactive ,以确保与现有应用程序的行为兼容。显式设置后,该属性将不再与交互属性绑定。

另请参阅 interactive


keyNavigationWraps : bool

该属性用于确定网格是否会包裹按键导航

如果设置为 "true",则按键导航会将当前项目选择移动到视图的一端,并将选择移动到视图的另一端。

默认情况下,按键导航不会被包裹。


layoutDirection : enumeration

此属性保留网格的布局方向。

可能的值

常量描述
Qt.LeftToRight(默认)项目将从左上角开始布局。流程取决于GridView::flow 属性。
Qt.RightToLeft项目将从右上角开始排列。流程取决于GridView::flow 属性。

注意:如果GridView::flow 设置为GridView.FlowLeftToRight,则不能与 GridView::layoutDirection 设置为 Qt.RightToLeft 混淆。GridView.FlowLeftToRight 流量值仅表示流量是水平的。

另请参阅 GridView::effectiveLayoutDirectionGridView::verticalLayoutDirection


model : model

该属性包含为网格提供数据的模型。

模型提供用于创建视图中项的数据集。模型可使用ListModel,DelegateModel,ObjectModel 在 QML 中直接创建,也可由 C++ 模型类提供。如果使用 C++ 模型类,它必须是QAbstractItemModel 或简单列表的子类。

另请参阅 数据模型


move : Transition

该属性包含应用于视图中因视图model 中的移动操作而移动的项目的转换。

例如,下面是一个指定了这种过渡的视图:

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

每当model 执行移动操作移动特定的索引集时,视图中相应的项将在一秒钟内以动画形式移动到它们在视图中的新位置。该过渡只适用于模型中移动操作的对象项,不适用于被移动操作移位的下方项。要为移动的项目设置动画,请设置displacedmoveDisplaced 属性。

有关如何使用视图转换的更多详情和示例,请参阅ViewTransition 文档。

另请参阅 moveDisplacedViewTransition


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

该属性包含应用于为视图初始创建的项目的过渡。

它适用于以下情况下创建的所有项目:

例如,这里有一个视图指定了这样的转换:

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

当视图初始化时,视图将为视图创建所有必要的项目,然后在一秒钟内将它们动画到视图中的正确位置。

然而,当稍后滚动视图时,即使委托在可见时被实例化,填充过渡也不会运行。当模型发生变化,新的委托变得可见时,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 文档。

另请参阅 addViewTransition


remove : Transition

该属性包含应用于从视图中移除的项目的过渡。

例如,下面的视图就指定了这样一个过渡:

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

每当从上述视图中移除一个项目时,该项目将在一秒钟内动画到位置 (100,100),并同时将其不透明度变为 0。该过渡只适用于从视图中移除的项目,不适用于因移除该项目而移位的项目。要为移位的项目设置动画,请设置displacedremoveDisplaced 属性。

请注意,在应用转换时,项目已从模型中移除;对移除索引的模型数据的任何引用都将无效。

此外,如果已为委托项设置了delayRemove attached 属性,则移除转换将不会应用,直到delayRemove 再次变为 false。

有关如何使用视图转换的更多详情和示例,请参阅ViewTransition 文档。

另请参阅 removeDisplacedViewTransition


removeDisplaced : Transition

该属性包含应用于视图中因移除其他项目而被移除的项目的过渡。

例如,下面是一个指定了这种转换的视图:

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

每当从上述视图中移除一个项目时,其下方的所有项目都会发生位移,导致它们在视图中向上(或向侧(如果水平方向))移动。随着位移的发生,项目在视图中移动到新的 x、y 位置的动画效果将在一秒钟内以NumberAnimation 的形式呈现。此转换不会应用于实际从视图中移除的项目;要为移除的项目制作动画,请设置remove 属性。

如果一个项目同时被多种类型的操作移除,则不会定义是应用addDisplacedmoveDisplaced 还是 removeDisplaced 过渡。此外,如果不需要根据项目是被添加、移动还是移除操作移位来指定不同的过渡,可以考虑设置displaced 属性。

有关如何使用视图转换的更多详情和示例,请参阅ViewTransition 文档。

另请参阅 displacedremoveViewTransition


reuseItems : bool

该属性可让您重复使用从delegate 实例化的项目。如果设置为false ,当前池中的任何项目都将被销毁。

该属性默认为false

另请参阅 Reusing itemspooled() 和reused()。


snapMode : enumeration

该属性决定拖动或轻移后视图滚动的稳定方式。可能的值有

常量说明
GridView.NoSnap(默认)视图停在可见区域内的任何位置。
GridView.SnapToRow视图在与视图起点对齐的行(或GridView.FlowTopToBottom flow 的列)中停止。
GridView.SnapOneRow在释放鼠标按钮时,视图将停在与第一行(或GridView.FlowTopToBottom flow 的列)相距不超过一行的位置。这种模式特别适用于一次移动一个页面。

verticalLayoutDirection : enumeration

此属性保留网格的垂直布局方向。

可能的值

常量说明
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 [read-only]

如果此委托是当前项目,则此附加属性为 true;否则为 false。

它附加到委托的每个实例。

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
}

GridView.view : GridView [read-only]

此附加属性包含管理此委托实例的视图。

它附加到委托的每个实例以及页眉、页脚和突出显示委托。


附加信号文档

add()

此附加信号会在项目添加到视图后立即发出。

注: 相应的处理程序是onAdd


pooled()

此信号在项目添加到重用池后发出。您可以用它来暂停项目中正在进行的计时器或动画,或释放无法重复使用的资源。

只有当reuseItems 属性为true 时,才会发出该信号。

注: 相应的处理程序是onPooled

另请参阅 Reusing items,reuseItems, 和reused() 。


remove()

此附加信号在项目从视图中移除之前立即发出。

如果指定了移除转换,则会在处理此信号后应用该转换,前提是delayRemove 为 false。

注: 相应的处理程序是onRemove


reused()

该信号在项目被重复使用后发出。此时,该项目已从池中取出并放置在内容视图中,模型属性(如indexrow )也已更新。

项目被重复使用时,模型不提供的其他属性不会改变。应避免在委托中存储任何状态,如果要存储,请在收到此信号时手动重置该状态。

该信号在项目被重复使用时发出,而不是在首次创建项目时发出。

只有当reuseItems 属性为true 时,才会发出该信号。

注: 相应的处理程序是onReused

另请参阅 Reusing items,reuseItems, 和pooled() 。


方法文档

positionViewAtBeginning()

positionViewAtEnd()

将视图定位在开头或结尾,同时考虑页眉或页脚。

不建议使用contentXcontentY 将视图定位在特定索引处。这种方法并不可靠,因为从列表起始位置移除项目并不会导致所有其他项目都被重新定位,而且视图的实际起始位置可能会根据委托的大小而变化。

注意:只有在组件完成后才能调用方法。要在启动时定位视图,应通过 Component.onCompleted 调用此方法。例如,在启动时将视图定位在末尾:

Component.onCompleted: positionViewAtEnd()

forceLayout()

对模型变化的响应通常是分批进行的,每帧只发生一次。这意味着在脚本块内,底层模型有可能已经发生变化,但GridView 还没有跟上。

此方法可强制GridView 立即响应模型中任何未完成的更改。

注意:方法只能在组件完成后调用。


int indexAt(real x, real y)

Returns the index of the visible item containing the pointx,y incontent item coordinates.如果在指定的点上没有项目,或者项目不可见,则返回-1。

如果项目不在可见区域内,无论滚动到视图时该点是否存在项目,都将返回-1。

注意: 如果添加MouseArea 作为GridView 的子代,它将以GridView 坐标而非内容项坐标返回位置。要在调用此函数时使用这些位置,需要先映射它们:

GridView {
    id: view
    MouseArea {
        anchors.fill: parent
        onClicked: (mouse) => {
            let posInGridView = Qt.point(mouse.x, mouse.y)
            let posInContentItem = mapToItem(view.contentItem, posInGridView)
            let index = view.indexAt(posInContentItem.x, posInContentItem.y)
        }
    }
}

注意:方法只能在组件完成后调用。

另请参阅 itemAt


Item itemAt(real x, real y)

Returns the visible item containing the pointx,y incontent item coordinates.如果在指定的点上没有项目,或者项目不可见,则返回空值。

如果项目在可见区域之外,则返回 null,无论滚动到视图时该点是否存在项目。

注意:方法只能在组件完成后调用。

另请参阅 indexAt


Item itemAtIndex(int index)

返回index 的项目。如果该索引没有项目,例如因为尚未创建,或因为已从可见区域平移并从缓存中删除,则返回 null。

注意:此方法只能在组件完成后调用。返回值也不应被存储,因为如果视图释放了该项目,一旦控件离开调用范围,返回值就会变为空值。


moveCurrentIndexDown()

currentIndex 在视图中向下移动一个项目。如果keyNavigationWraps 为 true 且当前位于尾部,则当前索引将被包围。如果count 为零,则此方法无效。

注意:方法只能在组件完成后调用。


moveCurrentIndexLeft()

在视图中将currentIndex 向左移动一个项目。如果keyNavigationWraps 为 true 且当前位于末尾,则当前索引将换行。如果count 为零,则此方法无效。

注意:方法只能在组件完成后调用。


moveCurrentIndexRight()

currentIndex 向右移动视图中的一个项目。如果keyNavigationWraps 为 true 且当前位于末尾,则当前索引将被包围。如果count 为零,则此方法无效。

注意:方法只能在组件完成后调用。


moveCurrentIndexUp()

currentIndex 在视图中向上移动一个项目。如果keyNavigationWraps 为 true 且当前位于末尾,则当前索引将被包围。如果count 为零,则此方法无效。

注意:方法只能在组件完成后调用。


positionViewAtIndex(int index, PositionMode mode)

定位视图,使index 位于mode 指定的位置:

常量说明
GridView.Beginning将项目定位在视图的顶部(或GridView.FlowTopToBottom flow 的左侧)。
GridView.Center将项目置于视图中心。
GridView.End将项目定位在视图的底部(或水平方向的右侧)。
GridView.Visible如果项目的任何部分可见,则不执行任何操作,否则将项目显示在视图中。
GridView.Contain确保整个项目可见。如果项目大于视图,则将项目定位在视图的顶部(或GridView.FlowTopToBottom 流向的左侧)。
GridView.SnapPosition将项目定位在preferredHighlightBegin 上。该模式只有在highlightRangeModeStrictlyEnforceRange 或通过snapMode 启用抢拍时才有效。

如果将视图定位在索引处会导致视图开始或结束处显示空白,则视图将定位在边界处。

不建议使用contentXcontentY 将视图定位在特定索引处。这种方法并不可靠,因为从视图起点移除项目并不会导致所有其他项目重新定位。将项目引入视图的正确方法是使用positionViewAtIndex

注意:方法只能在组件完成后调用。要在启动时定位视图,应通过 Component.onCompleted 调用该方法。例如,在结束时定位视图:

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

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.