ViewItems是依附于一个ListView或ListItem中的属性.我们可以利用它来管理我们的ListView或ListItem中项的drag-and-drop.下面我们来通过一个简单的例程来展示如何利用它来实现一些我们需要的功能:

Main.qml

import QtQuick 2.4
import Ubuntu.Components 1.3MainView {// objectName for functional testing purposes (autopilot-qt5)objectName: "mainView"// Note! applicationName needs to match the "name" field of the click manifestapplicationName: "viewitems.liu-xiao-guo"width: units.gu(60)height: units.gu(85)Page {id: pageheader: PageHeader {title: "viewitems"}ListModel {id: mymodelListElement { name: "images/image1.jpg" }ListElement { name: "images/image2.jpg" }ListElement { name: "images/image3.jpg" }ListElement { name: "images/image4.jpg" }ListElement { name: "images/image5.jpg" }ListElement { name: "images/image6.jpg" }ListElement { name: "images/image7.jpg" }ListElement { name: "images/image8.jpg" }ListElement { name: "images/image9.jpg" }ListElement { name: "images/image10.jpg" }ListElement { name: "images/image11.jpg" }ListElement { name: "images/image1.jpg" }ListElement { name: "images/image2.jpg" }ListElement { name: "images/image3.jpg" }}ListView {width: parent.widthheight: parent.height - page.header.heightanchors.top: page.header.bottommodel: mymodeldelegate: ListItem {Image {anchors.verticalCenter: parent.verticalCentersource: nameheight: units.gu(8)width: height}Label {text: indexanchors.horizontalCenter: parent.horizontalCenter}dragMode: falsecolor: dragMode ? "white" : "lightgray"onPressAndHold: ListView.view.ViewItems.dragMode =!ListView.view.ViewItems.dragModeonDragModeChanged: {console.log("dragMode: " + dragMode)}}ViewItems.dragMode: trueViewItems.onDragUpdated: {if (event.status === ListItemDrag.Started) {console.log("event.from: " + event.from + " " + "event.to: " + event.to)if (event.from < 5) {// deny dragging on the first 5 elementevent.accept = false;} else if (event.from >= 5 && event.from <= 10 ) {// specify the intervalevent.minimumIndex = 5;event.maximumIndex = 10;} else if (event.from > 10) {// prevent dragging to the first 11 items areaevent.minimumIndex = 11;}} else {console.log("moving ....")model.move(event.from, event.to, 1);}}}}
}

我们来运行我们的代码.

在上面的实现中,我们可以通过对event.status === ListItemDrag.Started的检测来限制那些项是可以移动的,或定义它们的移动的范围.
            ViewItems.onDragUpdated: {if (event.status === ListItemDrag.Started) {console.log("event.from: " + event.from + " " + "event.to: " + event.to)if (event.from < 5) {// deny dragging on the first 5 elementevent.accept = false;} else if (event.from >= 5 && event.from <= 10 ) {// specify the intervalevent.minimumIndex = 5;event.maximumIndex = 10;} else if (event.from > 10) {// prevent dragging to the first 11 items areaevent.minimumIndex = 11;}} else {console.log("moving ....")model.move(event.from, event.to, 1);}}

在上面的例子中,当我们在最前面的5个列表项中去移动时,它根本没有反应.当为我们在5-10的范围去移动我们的项时,如果在我们drop时,落下的项不在5-10之间,也不起任何的作用.也就是说5-10之间的项只能在它们之间进行交换.如果是10以外的项,它们只能在10以外的地方进行交换.

整个项目的源码在:https://github.com/liu-xiao-guo/viewitems

利用ViewItems来管理我们ListView项之间的drag-and-drog相关推荐

  1. 在linux环境中利用efibootmgr管理efi启动项[添加、删除、改变顺序]

    在linux环境中利用efibootmgr管理efi启动项[添加.删除.改变顺序] 本例可以解决uefi双系统中启动顺序的问题,首先确保自己的机器为uefi固件 在Terminel中输入efiboot ...

  2. linux efi启动,在linux环境中利用efibootmgr管理efi启动项

    UEFI用来替代传统BIOS引导操作系统,学会修改UEFI启动项也变得十分重要,UEFI全称为:"统一的可扩展固件接口"(Unified Extensible Firmware I ...

  3. fopen_s不接受两个参数_如何利用SPC来管理制造过程,不懂SPC还敢混“质”场?

    请点击上面 免费关注本账号! 必读 →  2019年4-5月开课计划(IASC-CN俱乐部) PC是汽车行业品质管理的重要工具之一,AIAG为此写了一整本书.这篇文章略去SPC一些基础知识的介绍,直接 ...

  4. 利用SMTP虚拟服务器实现不同邮件系统之间的通讯

    利用SMTP虚拟服务器实现不同 邮件系统之间的通讯   实验背景: 目前,有两家公司,一家为xiaonuo公司,另一家为dreamfire公司.都铺设了域环境,而且都安装了Exchange 2003, ...

  5. [敏捷项目管理] 精益管理的5项基本原则

    精益管理的重点 从最终客户的角度定义价值.(Defining value from the standpoint of the end customer) 消除业务流程中的所有浪费.(Eliminat ...

  6. Dictionary作为数据源绑定,调用c++库中返回为BYTE*的函数,listView项排序

    最近在做一个电子档案管理的项目.现在还处于初期,只是做一个简单demo拿去跟客户演示.至于最后谈不谈得下来,到底做不做,反正我是不看好,但没因为这样就马马虎虎.草草了事.这个项目算是b/s加c/s混合 ...

  7. 【Java24】健康项目:环境搭建,预约管理(检查项和检查组管理)

    文章目录 1. 技术架构和流程 2.数据库建模工具使用 3.环境搭建 3.1 项目结构 3.2 maven项目搭建 3.2.1 创建health_parent父工程 3.2.2 创建health_co ...

  8. 思科虚拟机服务器,利用Cisco UCS管理虚拟机网络

    Cisco UCS计算系统针对虚拟化环境的网络管理提供了两种解决方案:一种是纯软件的Cisco Nexus 1000V:一种是基于Cisco UCS M81KR网卡的硬件解决方案.Cisco Nexu ...

  9. 虚拟化技术:实现资源高效利用和灵活管理的利器

    虚拟化技术是一种通过软件或硬件手段,将物理资源抽象化,从而创建虚拟资源的技术.这种技术可以应用于计算.存储.网络等领域,通过将物理资源划分为多个虚拟资源,使得多个应用程序或用户可以共享同一组物理资源, ...

  10. efi 添加linux启动项,用efibootmgr管理UEFI启动项,添加丢失的启动项

    UEFI用来替代传统BIOS引导操作系统,学会修改UEFI启动项也变得十分重要,UEFI全称为:"统一的可扩展固件接口"(Unified Extensible Firmware I ...

最新文章

  1. Linux Kernel TCP/IP Stack — L3 Layer — 路由器子系统
  2. efcore 实体配置_快速掌握EF Core使用技能
  3. java-List集合的源码分析(数据结构方面,源码注释方面),迭代器快速失败机制
  4. 单例-初始化动作只执行一次
  5. 黄斑裂孔Macular Hole
  6. Android Studio 环境搭建参考,jdk10javac命令提示不是内部或外部命令
  7. Android 最简单的MVP案例;
  8. 卷积神经网络——第一周 卷积神经网络基础——第一部分
  9. Redis内存缓存系统入门
  10. iOS Android 上传代码库+持续集成+单元测试
  11. springboot的使用html页面及css、js路径的配置
  12. 深入理解Angular2变化监测和ngZone
  13. 腾讯云TDSQL TCP干货
  14. 神舟k650d i5 d3安装EI Capitan问题总结
  15. MySQL 集群Cluster
  16. steamcommunity 本地 443端口被占用解决方案
  17. MOTO不相信眼泪!艰难回归!你,准备好了吗?
  18. 结构体嵌套结构体,及其的初始化
  19. Mission Planner中级应用(APM或PIX飞控)4——无人机APM飞控硬件故障简单维修(上)
  20. 《提问的艺术》读书笔记

热门文章

  1. PostgreSQL存储过程BEGIN块的事务处理
  2. java运行环境配置_配置java开发运行环境的步骤
  3. 前后端分离的跨域问题
  4. JavaScript基础--DOM部分02--李南江
  5. 几种智能机器人室内定位方法对比
  6. Maya---2018up4 Python 开发环境配置(win10x64)
  7. 机器学习算法------6.4 模型评估(误差平方和、肘方法、轮廓系数法、CH系数)
  8. XTUOJ-1277-Triangle
  9. 解决uni-app小程序获取路由及路由参数
  10. 【解决方案】Ubuntu18.04 安装L2TP及相关设置