前言

用 QML 开发界面的好处想必就不用多说了吧,可以总结为一个字:爽。
的确如此,用 QML 可以快速的开发出一些非常酷炫和复杂的界面,并且代码还非常简洁,可读性很强,容易理解。
今天要总结的是关于 ListView 中的一些常用的属性,非常实用,不过如果是刚接触 ListView 的话,可能会有些陌生(本人刚开始用的时候也是,然后翻遍了 Qt 帮助文档),所以这里汇总一些最常用的属性并介绍其用法。

正文

类似相片浏览

相片浏览的场景相信大家都非常熟悉了,在手机中打开相册浏览相片的时候,通过左右滑动可以一张张的浏览相片,那么如果用ListView如何来实现呢,来看个简单的 demo

import QtQuick.Window 2.2
import QtQuick.Controls 2.2Window {visible: truewidth: 300height: 450title: qsTr("Hello World")ListView{id:listViewanchors.fill: parentmodel: 10snapMode: ListView.SnapOneItemorientation:ListView.Horizontaldelegate: Rectangle{width: listView.widthheight: listView.heightcolor: index%2 ? "red":"yellow"Label{anchors.centerIn: parentfont.pointSize: 100text: index}}}
}

效果图:

代码很简单,最重要的两句话:

snapMode: ListView.SnapOneItem
orientation:ListView.Horizontal

第一句是将切换模式设置为单张切换;
第二句是将列表改成水平浏览模式。

currentIndex动态切换

不知道大家有没有遇到过这种情况,当切换ListView的item的时候,currentIndex并不会跟随着变化,来看个示例:

那么,如何将在我们切换 item 的时候将 currentIndex 也跟随着变化呢?只需要添加一句:

highlightRangeMode: ListView.StrictlyEnforceRange

再看看效果图:

为什么要特意将 currentIndex动态切换提出来单独说呢,有时候这个功能会特别有用,特别是我在开发相片浏览功能的时候,比如我们在切换 item 后需要用到当前的 currentIndex,这时候如果 index 不跟随变化那就麻烦了。之前网上有人的做法是,在 delegate 中添加 MouseAera中,响应点击事件然后手动currentIndex ,这种方法存在很多弊端。

禁止列表首尾滑动

这个标题可能有些拗口,意思其实就是,当列表在首页或尾页的时候,如果再继续滑动会有回弹的效果。
先看个效果图:


但是有些设计中可能并不需要这种默认的设置,那么该如何修改呢,其实很简单,加上这句话:

boundsBehavior:Flickable.StopAtBounds

这其实就是设置在边缘的时候不能再滑动,再看一下效果:

设置最大滑动速度

不知道大家在做 QML for Android 开发的时候有没有遇到过这种问题,特别是前几年 Qt 低版本的时候,使用 ListView 编译到 Android 手机上,列表滑动特别不自然,滑动速度特别快(也和手机屏幕像素有关),和平台的兼容性没有做得很好,幸好随着 Qt 版本的升级,解决了这个问题,不过有时候还是需要自己控制最大的滑动速度,设置属性如下:

maximumFlickVelocity:7000  //设置滑动的最大速度

这里的数值单位是: 像素/秒
如果不做设置,会默认跟随平台特性来执行。如果要自己定义这个滑动速度,需要多调试一下,找到适合的滑动效果。

添加 header

ListView 可以设置 headerItem,话不多说,直接看效果图吧

ListView{id:listViewanchors.fill: parentmodel: 10headerPositioning: ListView.PullBackHeaderheader: Rectangle{width: listView.widthheight: 70color: "green"Label{anchors.centerIn: parenttext: "this is header"}}onCurrentIndexChanged: {console.log("current index = ",currentIndex)}delegate: Rectangle{width: listView.widthheight: 280color: index%2 ? "red":"yellow"Label{id:txtanchors.centerIn: parentfont.pointSize: 100text: index}Label{anchors.top: txt.bottomfont.pointSize: 30text: "currentIndex = " + listView.currentIndexanchors.horizontalCenter: parent.horizontalCenter}}}

和 header 对应的还有一个 footer,原理是一样的,只是显示的位置是在底部。这里就不多介绍了。

下拉刷新

ListView列表下拉刷新是最常见的 场景了吧,这里为了演示做了一个简单的 demo,先来看看效果


源码:

import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 2.2Window {visible: truewidth: 250height: 350title: qsTr("ListView")property bool refreshFlag: falseRectangle{width: parent.widthheight: -listView.contentYcolor: "cyan"Label{anchors.centerIn: parenttext:"下拉刷新"visible: listView.contentYr}}BusyIndicator{id:busyz:4running: falseanchors.horizontalCenter: parent.horizontalCenteranchors.top: parent.topanchors.topMargin: parent.height/3.Timer{interval: 2000running: busy.runningonTriggered: {busy.running = false}}}ListView{id:listViewanchors.fill: parentmodel: 30onContentYChanged: {if(-contentY > 40){refreshFlag = true}}onMovementEnded: {if(refreshFlag){refreshFlag = falsebusy.running = true}}onCurrentIndexChanged: {console.log("current index = ",currentIndex)}delegate: Rectangle{width: listView.widthheight: 70color: index%2 ? "red":"yellow"Label{id:txtanchors.centerIn: parentfont.pointSize: 20text: index}}}
}

OK,暂且介绍这几种最常用的功能,写得不好的地方请多指出。

QML ListView几个常用且非常重要的属性相关推荐

  1. Delphi ListView的用法(常用技巧) 作者:蓝色忧郁

    Delphi ListView的用法(常用技巧) 作者:蓝色忧郁 日期:2006-08-10 字体大小: 小 中 大 //增加   i := ListView1.Items.Count;   with ...

  2. js操作元素:改变元素内容有两种方式: interText 和 innerHTML的区别, 常用的元素的属性操作, 仿电脑系统时间问好 ,表单元素的属性操作 ,案例:仿京东显示隐藏密码 ,样式属性操作

    文章目录 操作元素 改变元素内容有两种方式: interText 和 innerHTML的区别 常用的元素的属性操作 案例:仿电脑系统时间问好 表单元素的属性操作 案例:仿京东显示隐藏密码 样式属性操 ...

  3. CSS: CSS常用的文本样式属性

    介绍:CSS常用的文本样式属性 color:  颜色 font-size:  字体大小 font-style (normal.italic.oblique): 字体样式(正常.斜体) font-wei ...

  4. 常用的display的属性

    常用的display的属性 1. display:inline(默认值) 将设置该元素的标签以内联元素即像普通文本一样插入文档流,不会自动换行或者设置宽度跟高度: 其中设置该元素的标签的宽度跟高度以放 ...

  5. QML ListView悬浮标题栏

    前言 随着Qt版本的不断升级,现在用QML做移动开发越来越方便,并且代码也非常简洁容易理解,Android原生开发中的材料设计界面很普遍,很多软件都是走这个风格设计,并且随着Android开发很多开源 ...

  6. android qml 菜单,QML - ListView项目,用于显示菜单

    当用户点击项目时,我正在寻找关于在列表项目下显示菜单的一些提示和指示 . 如果我有这样的ListModel: ListModel { ListElement { name: "Bill Sm ...

  7. QML ListView实现多选操作

    需求: 单击默认为单选,按住Ctrl+点击为任意项多选,按住Shift+点击为连续项多选 分析: 1.点击时区分按键状态来进行不同的操作: 2.根据不同的操作修改列表项的选中状态. 在Qt Widge ...

  8. QML ListView 实现下拉刷新 上拉加载

    目录 1. 简述 2. 代码 2.1 PullListViewV2.qml 2.2 main.qml 1. 简述 QML 中ListView没有自带这个功能,但是提供了自定义页头和页脚组件,控制组件有 ...

  9. QML学习之QML常用的元素和属性

    QML常用的控件和属性 Item Rectangle text image MouseArea Component组件 简单变换 Item 元素可以分为可视元素和不可视元素Item是所有视觉元素的基础 ...

最新文章

  1. 写个自己的Xcode4插件(二)
  2. python3 获取 当前作用域 全部参数的内置方法 locals()
  3. 皮一皮:所以说女生的好奇心不能太大...
  4. linux发行版本在这里。
  5. shell命令的文本计算
  6. 数据库设计的三大范式、BCNF、4NF
  7. 5- vue django restful framework 打造生鲜超市 -完成商品列表页(上)
  8. 向量数量积公式_多法 | 向量数量积相关最值问题的常见处理方法
  9. 如何实现“持续集成”?闲鱼把研发效率翻了个翻
  10. (10)js操作符(运算符)
  11. 红旗linux挂载硬盘命令,红旗6sp1修改默认挂载的硬盘分区
  12. JDK1.8 win10系统 环境变量配置
  13. VueSSR高阶指南
  14. 蛮力法 —— 求解最大连续子序列和问题
  15. C++primer 13.1.2节练习
  16. 破解wifi并实施中间人攻击
  17. c 语言ifelse语句的用法,C 语言 if...else 语句
  18. Python之京东商品秒杀
  19. dpkg制作deb包详解
  20. linux开机动画制作教程,Android开机画面制作(Bootloader阶段)

热门文章

  1. 云信小课堂 | 聊天室内容审核很头疼? 3 步解决!
  2. Linux系统故障修复-MBR损坏,grub.conf配置文件丢失
  3. Keras + Ubuntu环境搭建
  4. 使用gulp和vsc构建高效的typescript开发环境
  5. Redux系列01:从一个简单例子了解action、store、reducer
  6. 使用go build 进行条件编译
  7. 关于win7的64位和32位有什么不同性价比怎么比
  8. [原创]RCP项目:数字图像处理软件
  9. Report Service 中数据类型的问题
  10. 推荐九种天然食物脑黄金