一、描述

ListView 继承自 Flickable,用作显示来自内置 QML 类型(如 ListModelXmlListModel)或从 QAbstractItemModelQAbstractListModel 继承的 C++ 中定义的自定义模型类创建的模型中的数据。

二、使用示例

import QtQuick 2.12
import QtQuick.Window 2.0Window
{id:root;visible: true;width: 200; height: 200ListView{anchors.fill: parentmodel:ListModel{ListElement{name: "张三";number: "555 3264"}ListElement{name: "李四";number: "555 8426"}ListElement{name: "王五";number: "555 0473"}}delegate: Text{text: name + ": " + number}}
}

import QtQuick 2.12
import QtQuick.Window 2.0Window
{id:root;visible: true;width: 200; height: 200Component{id: contactDelegateItem{width: 180;height: 40Column{Text { text: '<b>Name:</b> ' + name }Text { text: '<b>Number:</b> ' + number }}}}ListView{anchors.fill: parentmodel:ListModel{ListElement{name: "张三";number: "555 3264"}ListElement{name: "李四";number: "555 8426"}ListElement{name: "王五";number: "555 0473"}}delegate:contactDelegatehighlight: Rectangle { color: "lightsteelblue"; radius: 5 }focus: true}
}

三、属性成员

1、highlightMoveDuration : int

highlightMoveVelocity : real

highlightResizeDuration : int

highlightResizeVelocity : real

这些属性控制高亮代理的移动速度和调整大小动画。

highlightFollowsCurrentItem 必须为 true 才能使这些属性生效。

速度属性的默认值为 400 像素/秒。

持续时间属性的默认值是 -1,即高亮将花费尽可能多的时间以设置的速度移动。

2、displayMarginBeginning : int

displayMarginEnd : int

此属性允许在视图几何图形之外显示委托。默认值为 0。

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

import QtQuick 2.12
import QtQuick.Window 2.0Window
{id:root;visible: true;width: 200; height: 200ListView{width: 200; height: 15
//        displayMarginBeginning:40;displayMarginEnd:40model:ListModel{ListElement{name: "张三";number: "555 3264"}ListElement{name: "李四";number: "555 8426"}ListElement{name: "王五";number: "555 0473"}}delegate: Text{height:20;width: 200text: name + ": " + number}}
}

        displayMarginBeginning:40;displayMarginEnd:40

3、highlightRangeMode : enumeration

preferredHighlightBegin : real

preferredHighlightEnd : real

这些属性定义了视图中突出显示的首选范围(对于当前项目)。

preferredHighlightBegin 值必须小于 preferredHighlightEnd 值。

highlightRangeMode 的有效值为:

  • ListView.ApplyRange:视图尽可能将高亮保持在范围内。
  • ListView.StrictlyEnforceRange:高亮不会超出范围。
  • ListView.NoHighlightRange:默认值,无高亮范围。
import QtQuick 2.12
import QtQuick.Window 2.0Window
{width: 300height: 150visible: trueListView{anchors.fill: parentspacing: 5model: 20delegate:Rectangle{width: 30color: ListView.view.currentIndex === index ? "red" : "steelblue"height: ListView.view.heightText{anchors.centerIn: parenttext: indexfont.pixelSize: 20}}orientation: Qt.HorizontalpreferredHighlightBegin: 135preferredHighlightEnd: 165highlightRangeMode: ListView.StrictlyEnforceRange}
}

设置高亮的范围在135-165像素之间。

4、currentIndex : int

currentItem : Item

currentIndex 属性保存当前项的索引,而 currentItem 保存当前项。

currentIndex 设置为 -1 将清除突出显示并将 currentItem 设置为 null。

如果 highlightFollowsCurrentItem 为 true,则设置这些属性中的任何一个都会平滑滚动 ListView,以便当前项变为可见。

5、add : Transition

新项目添加到视图的转换。

import QtQuick 2.12
import QtQuick.Window 2.0Window
{id:root;visible: true;width: 200; height: 200ListModel{id:modelListElement{name: "张三";number: "555 3264"}ListElement{name: "李四";number: "555 8426"}ListElement{name: "王五";number: "555 0473"}}ListView{anchors.fill: parentmodel:modeldelegate: Text{text: name + ": " + number}add: Transition {NumberAnimation { properties: "x,y"; from: 100; duration: 1000 }}}MouseArea{anchors.fill: parentonPressed:{var data = {'name':"赵六",'number':"778 0899"};model.append(data);}}
}

addDisplaced : Transition

当要把视图中现有的项目换成新项目(置换)时的转换。

可以和 add 配合使用:add 表被添加的那个的动画,此属性表示由于 add 操作受影响的其他项的动画。

     MouseArea{anchors.fill: parentonPressed:{var data = {'name':"赵六",'number':"778 0899"};model.insert(1,data)}}

displaced : Transition

添加、移动、置换的通用转换。

如果视图指定了特定的 addDisplacedmoveDisplacedremoveDisplaced 转换,则在相关操作发生时将使用更具体的转换而不是通用转换。

move : Transition

视图中项目移动操作的转换。

     MouseArea{anchors.fill: parentonPressed:{model.move(1,2,1)}}

moveDisplaced : Transition

可以和 move 一起使用,move 表示要移到的动画,此属性表示受 move 影响的其他项的动画。

import QtQuick 2.12
import QtQuick.Window 2.0Window
{id:root;visible: true;width: 200; height: 200ListModel{id:modelListElement{name: "张三";number: "555 3264"}ListElement{name: "李四";number: "555 8426"}ListElement{name: "王五";number: "555 0473"}}ListView{anchors.fill: parentmodel:modeldelegate: Text{text: name + ": " + number}move : Transition//李四{NumberAnimation { properties: "x,y"; from: 100; duration: 1000 }}moveDisplaced  : Transition//王五{NumberAnimation { properties: "x,y"; from: 200; duration: 1000 }}}MouseArea{anchors.fill: parentonPressed:{model.move(1,2,1)//把李四移到王五的位置}}
}

populate : Transition

此属性包含要应用于最初为视图创建的项目的转换。

import QtQuick 2.12
import QtQuick.Window 2.0Window
{id:root;visible: true;width: 200; height: 200ListModel{id:modelListElement{name: "张三";number: "555 3264"}ListElement{name: "李四";number: "555 8426"}ListElement{name: "王五";number: "555 0473"}}ListView{id:listanchors.fill: parentmodel:modeldelegate: Text{text: name + ": " + number}populate : Transition{NumberAnimation { properties: "x,y"; from: 100; duration: 1000 }}}
}

remove : Transition

项目移除时的转换。

import QtQuick 2.12
import QtQuick.Window 2.0Window
{id:root;visible: true;width: 200; height: 200ListModel{id:modelListElement{name: "张三";number: "555 3264"}ListElement{name: "李四";number: "555 8426"}ListElement{name: "王五";number: "555 0473"}}ListView{id:listanchors.fill: parentmodel:modeldelegate: Text{text: name + ": " + number}remove : Transition{NumberAnimation { properties: "x,y"; to: 100; duration: 1000 }}}MouseArea{anchors.fill: parentonPressed:{model.remove(1,2)}}
}

removeDisplaced : Transition

move 影响的其他项目的转换。

import QtQuick 2.12
import QtQuick.Window 2.0Window
{id:root;visible: true;width: 200; height: 200ListModel{id:modelListElement{name: "张三";number: "555 3264"}ListElement{name: "李四";number: "555 8426"}ListElement{name: "王五";number: "555 0473"}}ListView{id:listanchors.fill: parentmodel:modeldelegate: Text{text: name + ": " + number}remove : Transition{NumberAnimation { properties: "x,y"; to: 100; duration: 1000 }}removeDisplaced  : Transition{NumberAnimation { properties: "rotation"; from:0; to: 360; duration: 2000 }NumberAnimation { properties: "y"; duration: 2000 }}}MouseArea{anchors.fill: parentonPressed:{model.remove(1,1)}}
}

6、cacheBuffer : int

此属性确定委托是否保留在视图的可见区域之外。如果此值大于零,则视图可能会保留尽可能多的委托实例化。

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

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

7、count : int

此属性保存视图中的项目数。

8、currentSection : string

当前项的Section。见下面的属性21和附加属性4。

9、delegate : Component

委托提供了一个模板,定义了视图实例化的每个项目。

10、effectiveLayoutDirection : enumeration

此属性保存水平方向列表的有效布局方向。

当使用附加属性 LayoutMirroring::enabled 时,将镜像水平列表的视觉布局方向。但是,视图的layoutDirection 属性将保持不变。可以用此属性获取有效的布局方向。

11、footer : Component / header : Component

此属性包含要用作页脚 / 页眉的组件。页脚 / 页眉位于视图的末尾 / 头部。

footerItem : Item / headerItem : Item

页脚 / 页眉项目。页脚 / 页眉位于视图的末尾 / 头部。

footerPositioning : enumeration

此属性确定页脚项的位置。

  • ListView.InlineFooter:默认,页脚位于 content 的末尾,并像普通项目一样与 content 一起移动。
  • ListView.OverlayFooter:页脚位于视图的末尾。
  • ListView.PullBackFooter:页脚位于视图的末尾。可以通过向后移动 content 来推开页脚,通过向前移动 content  来拉回。

如果未设置为ListView.InlineFooter,则无法从页脚按下并轻弹列表。

headerPositioning : enumeration

此属性确定页眉项的位置。

  • ListView.InlineHeader:默认,页眉位于 content 的开头,并像普通项目一样与 content 一起移动。
  • ListView.OverlayHeader:位于视图的开头。
  • ListView.PullBackHeader:页眉位于视图的开头。可以通过向前移动 content 来推开页眉,通过向后移动 content 来拉回页眉。

如果未设置为 ListView.InlineHeader,则无法从页眉中按下并轻弹列表。

12、highlight : Component

此属性包含要用作突出显示的组件。

13、highlightFollowsCurrentItem : bool

此属性保存突出显示是否由视图管理。

如果此属性为 true(默认值),则突出显示将平滑移动以跟随当前项。否则,高亮不会被视图移动,任何移动都必须由高亮实现。

import QtQuick 2.12
import QtQuick.Window 2.0Window
{id:root;visible: true;width: 200; height: 200Component{id: highlightRectangle{width: 180; height: 10color: "lightsteelblue"; radius: 5y: list.currentItem.yBehavior on y{SpringAnimation{spring: 3damping: 0.2}}}}ListView{id: listwidth: 180; height: 200model:ListModel{ListElement{name: "张三";number: "555 3264"}ListElement{name: "李四";number: "555 8426"}ListElement{name: "王五";number: "555 0473"}}delegate: Text {font.pixelSize: 24; text: name }highlight: highlighthighlightFollowsCurrentItem: falsefocus: true}
}

设为false,则高亮项组件与设置的组件保持一致。

        highlightFollowsCurrentItem: true

为true则高亮由视图管理,会自适应项。

14、highlightItem : Item

保存了从高亮组件创建的高亮项目。

15、keyNavigationEnabled : bool

此属性保存是否启用列表的键盘导航。

16、keyNavigationWraps : bool

此属性保存列表是否包含键导航。

17、layoutDirection : enumeration

水平方向列表的布局方向。如果 orientation 为 Qt.Vertical,则设置此属性无效。

  • Qt.LeftToRight:默认,项目将从左到右排列。
  • Qt.RightToLeft:项目将从右到左排列。

verticalLayoutDirection : enumeration

垂直方向列表的布局方向。如果 orientation 为 Qt.Horizontal,则设置此属性无效。

  • ListView.TopToBottom:默认,项目从视图顶部到视图底部排列。
  • ListView.BottomToTop:项目从视图底部到视图顶部排列。

18、model : model

此属性保存为列表提供数据的模型。该模型提供用于在视图中创建项目的数据集。

19、orientation : enumeration

此属性保存列表的方向。

  • ListView.Horizontal:项目水平排列
  • ListView.Vertical:默认值,项目垂直布局
    ListModel{id:modelListElement{name: "张三";number: "555 3264"}ListElement{name: "李四";number: "555 8426"}ListElement{name: "王五";number: "555 0473"}}ListView{anchors.fill: parentmodel:modelorientation : ListView.Horizontaldelegate: Text{text: name + ": " + number}}

20、reuseItems : bool

此属性使得能够重用从委托实例化的项目。默认为 false。

一般用法是配合 pooled() 附加信号使用的。

21、section 组

section.criteria : enumeration

section.delegate : Component

section.labelPositioning : enumeration

section.property : string

此组属性用作对Model内容的分组/分节展示。

section.property 包含作为每个分组基础的属性的名称。

section.criteria 保存了基于 section.property 形成分组的标准。

  • ViewSection.FullString:默认,分组是根据 section.property 值创建的。
  • ViewSection.FirstCharacter:根据 section.property 值的第一个字符创建部分。

section.delegate 保存每个分组的委托组件。

section.labelPositioning 确定当前与下一个分组是否贴在视图的开始/结束处,以及标签是否内嵌显示。

  • ViewSection.InlineLabels:默认,部分标签在分隔部分的项目委托之间内联显示。
  • ViewSection.CurrentLabelAtStart:当前部分标签在移动时粘在视图的开头。
  • ViewSection.NextLabelAtEnd:下一部分标签在移动时粘在视图的末尾。

注意:启用 ViewSection.NextLabelAtEnd 需要视图提前扫描下一部分,这会影响性能,尤其是对于较慢的模型。

import QtQuick 2.12
import QtQuick.Window 2.0Window
{id:root;visible: true;width: 200; height: 400Component{id: sectionHeadingRectangle{width: 200height: 40color: "red"required property string sectionText{text: parent.section + " -- 测试"font.bold: truefont.pixelSize: 20}}}ListView{anchors.fill: parentmodel:ListModel{ListElement{sex:"男";name: "张三"}ListElement{sex:"男";name: "李四"}ListElement{sex:"女";name: "王五"}ListElement{sex:"女";name: "赵六"}ListElement{sex:"女";name: "钱七"}ListElement{sex:"男";name: "孙八"}ListElement{sex:"女";name: "周九"}}delegate: Text{required property string nametext: namefont.pixelSize: 18}section.property: "sex"section.criteria: ViewSection.FullStringsection.delegate: sectionHeadingsection.labelPositioning: ViewSection.InlineLabels}
}

22、snapMode : enumeration

此属性决定了在拖动或轻弹后视图滚动的方式。

  • ListView.NoSnap:默认,视图在可见区域内的任何位置停止。
  • ListView.SnapToItem:视图以与视图开头对齐的项目固定。
  • ListView.SnapOneItem:释放鼠标按钮时,视图与第一个可见项目之间的距离不超过一个项目。此模式对于一次移动一页特别有用

23、spacing : real

此属性保存项目之间的间距。默认值为 0。

四、附加属性成员

1、ListView.delayRemove : bool

此附加属性保存委托是否可以被销毁。它附加到委托的每个实例。默认值为 false。

有时需要将项目的销毁延迟到动画完成。下面的示例委托确保动画在从列表中删除项目之前完成。

import QtQuick 2.12
import QtQuick.Window 2.0Window
{id:root;visible: true;width: 200; height: 200ListModel{id:modelListElement{name: "张三";number: "555 3264"}ListElement{name: "李四";number: "555 8426"}ListElement{name: "王五";number: "555 0473"}}Component{id: delegateText{id:delegateItemtext: name + ": " + numberSequentialAnimation{id: removeAnimationPropertyAction { target: delegateItem; property: "ListView.delayRemove"; value: true }NumberAnimation { target: delegateItem; property: "scale"; to: 0; duration: 1000; easing.type: Easing.InOutQuad }
//                PropertyAction { target: delegateItem; property: "ListView.delayRemove"; value: false }}ListView.onRemove: removeAnimation.start()}}ListView{anchors.fill: parentmodel:modeldelegate: delegateMouseArea{anchors.fill: parentonPressed:{model.remove(1,2)}}
}

这里不使用 Transition。

2、ListView.isCurrentItem : bool

此委托是否当前项。它附加到委托的每个实例

此属性可用于调整当前项的外观,例如:

import QtQuick 2.12
import QtQuick.Window 2.0Window
{id:root;visible: true;width: 200; height: 200ListModel{id:modelListElement{name: "张三";number: "555 3264"}ListElement{name: "李四";number: "555 8426"}ListElement{name: "王五";number: "555 0473"}}ListView{id:listanchors.fill: parentmodel:modelfocus: truedelegate: Text{text: name + ": " + numbercolor: ListView.isCurrentItem ? "blue" : "red"}}
}

3、ListView.view : ListView

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

附加到委托的每个实例,也附加到页眉、页脚、节和高亮委托

4、ListView.nextSection : string

此附加属性保存下一个元素的部分。它附加到委托的每个实例

ListView.previousSection : string

上一个元素,它附加到委托的每个实例

ListView.section : string

此附加属性包含此元素的部分。它附加到委托的每个实例

五、附加信号

1、add()

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

2、pooled()

在将项目添加到重用池后发出此信号。仅当 reuseItems 属性为 true 时才会发出此信号。

可以使用它来暂停项目内正在进行的计时器或动画,或释放无法重复使用的资源

3、remove()

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

如果指定了删除转换(remove : Transition),则在处理此信号后应用它,前提是 ListView.delayRemove 为 false。

4、reused()

该信号在项目被重用后发出。 至此,item已经从重用池中取出,放到 content view里面,index、row等模型属性也已经更新了。

仅当 reuseItems 属性为 true 时才会发出此信号。

六、成员函数

1、positionViewAtBeginning()

positionViewAtEnd()

将视图定位在开头或结尾。只能在组件完成后调用。

要在启动时定位视图,应由 Component.onCompleted 调用此方法。

例如,要在启动时将视图定位在末尾:

Component.onCompleted: positionViewAtEnd()

2、decrementCurrentIndex()  /  incrementCurrentIndex()

递减 / 递增当前索引。只能在组件完成后调用。

3、forceLayout()

强制布局,强制 ListView 立即响应模型中的任何未完成更改。只能在组件完成后调用。

4、int indexAt(real x, real y)

返回包含内容坐标中点 x, y 的可见项的索引。只能在组件完成后调用。

如果在指定点处没有项目,或者项目不可见,则返回 -1。

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

5、Item itemAt(real x, real y)

返回包含内容坐标中点 x, y 的可见项。只能在组件完成后调用。

如果在指定的点没有项目,或者项目不可见,则返回 null。

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

6、Item itemAtIndex(int index)

返回索引项。只能在组件完成后调用。

如果该索引没有项目,例如因为它还没有被创建,或者因为它已经被移出可见区域并从缓存中移除,则返回 null。

返回的值也不应该被存储,因为一旦控制离开调用范围,如果视图释放该项目,它就会变成 null。

7、positionViewAtIndex(int index, PositionMode mode)

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

  • ListView.Beginning:将项目放置在视图的顶部(或左侧用于水平方向)。
  • ListView.Center:将项目放置在视图的中心。
  • ListView.End:将项目放置在视图的底部(或水平方向的右侧)。
  • ListView.Visible:如果项目的任何部分可见,则不采取任何行动,否则将项目置于视野中。
  • ListView.Contain:确保整个项目可见。如果项目大于视图,则项目位于视图的顶部(或左侧用于水平方向)。
  • ListView.SnapPosition:将项目定位在 preferredHighlightBegin。此模式仅在 highlightRangeMode 为 StrictlyEnforceRange 或通过 snapMode 不为 NoSnap 时有效。

如果将视图定位在 index 处会导致在视图的开头或结尾显示空白空间,则视图将定位在边界处。

只能在组件完成后调用。要在启动时定位视图,应由 Component.onCompleted 调用此方法。例如,将视图放在最后:

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

QML类型:ListView相关推荐

  1. QML类型——ListView

    正文 为列表模型(ListModel)的所有元素提供列表视图. 详细说明 ListView显示内置QML类型(例如ListModel和XmlListModel)创建的模型数据,或者使用C++定义的自定 ...

  2. ListElement QML类型

    ListElement QML类型 ListElement QML类型 详细说明 引用角色 用法示例 ListElement QML类型 在ListModel中定义一个数据项. Import Stat ...

  3. QML类型——Component

    正文 Component是封装好的,定义明确接口的QML类型,可以重用. 组件通常是由组件文件(即.qml文件)定义.Component类型实质上允许在QML文件中内联定义QML组件,而不是将其定义为 ...

  4. Qt 从C ++定义QML类型(二)

    前言 在上一篇文章中介绍了如何注册一个C++的可实例化的对象类型供 QML 中使用,那么今天继续之前的文章介绍. 正文 注册不可实例化类型 有时候QObject派生类可能需要在QML类型系统中注册,但 ...

  5. Qt 从C ++定义QML类型(一)

    概述 前面几篇文章介绍了如何在 QML 中调用 C++ 属性,那么这里集中总结一下如何在 C++中定义 QML 类型,其实在之前的示例中已经有用到过的. 当用C ++代码扩展QML时,可以向QML类型 ...

  6. 从C ++定义QML类型

    从C ++定义QML类型 从C ++定义QML类型 向QML类型系统注册C ++类型 注册可实例化对象类型 注册非实例类型 用单例类型注册单例对象 类型修订和版本 注册扩展对象 定义特定于QML的类型 ...

  7. ObjectModel QML类型

    ObjectModel QML类型 ObjectModel QML类型 特性 附属物业 方法 详细说明 Property Documentation Attached Property Documen ...

  8. ListModel QML类型

    ListModel QML类型 ListModel QML类型 特性 方法 详细说明 用法示例 修改列表模型 将线程列表模型与WorkerScript一起使用 Property Documentati ...

  9. DelegateModelGroup QML类型

    DelegateModelGroup QML类型 DelegateModelGroup QML类型 特性 讯号 方法 详细说明 Property Documentation 计数:整数 include ...

最新文章

  1. 谋定新型农业主体-农业大健康·万祥军:农业高质量发展规划
  2. C语言高级编程:接续符‘\‘的用法
  3. capslock键英语怎么读_刚开始读英文原版书该怎么做?商务英语专业有前途吗?...
  4. 仿ISQL功能的实现,可以实现批处理功能
  5. python函数的嵌套和递归_Python通过递归函数输出嵌套列表元素
  6. vb四则运算计算机,怎么用VB做简易的四则运算计算器
  7. MyRocks之备份恢复
  8. Matlab 2016a 安装包及破解教程
  9. 最小二乘支持向量机(LSSVM)推导
  10. comsol APP开发基础功能应用
  11. 东方财富通l2决策版_东方财富三季度报点评:券茅券商中的茅台!
  12. 宽屏电脑应用不全屏显示问题
  13. LTU、TTU、DTU、FTU、RTU在电路中的安装位置,功能,区别
  14. PS软件操作应用—文字特效
  15. Qt学习之.pro和.qrc创建及介绍
  16. oracle scott用户来历,Oracle应用之Scott用户简介
  17. 制造企业发展第三方物流的思路探讨 (zt)
  18. RocketMQ - nameSrv和Broker
  19. 数据库表设计字段说明
  20. 远程答题的存在对于游戏工作室的重要性

热门文章

  1. android颜色大全
  2. 三种常见Content-Type格式,最后一种你肯定用过
  3. python实现验证码识别_python实现图文验证码识别
  4. HBase常用Shell与JavaAPI操作
  5. 原生ajax请求并渲染,原生js的ajax数据渲染
  6. 兰菲丝lafansee帮你留住岁月的脚步,保存青春魅力的气息
  7. mysql 导出insert 语句_mysqldump导出sql中insert语句的问题
  8. jQuery的Ajax实例(附完整代码)
  9. oracle解除180,Oracle密码过期怎么取消密码180天限制
  10. 解析企业使用开源软件的潜在风险