最近在学习Qt 里面的QML, 使用DropArea和MouseArea实现了ListView的拖拽.

想起了当年用Delphi, 差不多一样的东西, 不过那是2000了. Delphi也是不争气啊, 多好的IDE, 硬生生发展不起来.....

代码可以在 https://github.com/cnscud/learn/tree/master/qt/dragdroplistview 找到

/**
samples changed from Qt tutorial "dynamicview3"
*/ import QtQuick 2.0
import QtQml.Models 2.1 Rectangle {
id: root width: 300; height: 400 Component {
id: dragDelegate MouseArea {
id: dragArea anchors { left: parent.left; right: parent.right }
height: content.height // Disable smoothed so that the Item pixel
// from where we started the drag remains under the mouse cursor
drag.smoothed: false drag.target: content drag.axis: Drag.YAxis Rectangle {
id: content anchors {
horizontalCenter: parent.horizontalCenter
verticalCenter: parent.verticalCenter
}
width: dragArea.width; height: column.implicitHeight + 4 border.width: 1
border.color: "lightsteelblue" color: dragArea.drag.active ? "lightsteelblue" : "white" Behavior on color { ColorAnimation { duration: 100 } } radius: 2 Drag.active: dragArea.drag.active Drag.source: dragArea
Drag.hotSpot.x: width / 2
Drag.hotSpot.y: height / 2 states: State {
when: content.Drag.active ParentChange { target: content; parent: root }
AnchorChanges {
target: content
anchors { horizontalCenter: undefined; verticalCenter: undefined }
}
} Column {
id: column
anchors { fill: parent; margins: 2 }
Text { text: 'Name: ' + name }
} } DropArea {
anchors { fill: parent; margins: 10 } onEntered: {
visualModel.items.move(
drag.source.DelegateModel.itemsIndex,
dragArea.DelegateModel.itemsIndex)
}
} }
} DelegateModel {
id: visualModel model: PetsModel {}
delegate: dragDelegate
} ListView {
id: view anchors { fill: parent; margins: 2 } model: visualModel spacing: 4 cacheBuffer: 50 moveDisplaced: Transition {
NumberAnimation { properties: "x,y"; duration: 200 }
} } }

用的PetModels如下:

import QtQuick 2.0

ListModel {
ListElement {
name: "Polly"
type: "Parrot"
age: 12
size: "Small"
}
ListElement {
name: "Penny"
type: "Turtle"
age: 4
size: "Small"
}
ListElement {
name: "Warren"
type: "Rabbit"
age: 2
size: "Small"
}
ListElement {
name: "Spot"
type: "Dog"
age: 9
size: "Medium"
}
ListElement {
name: "Schrödinger"
type: "Cat"
age: 2
size: "Medium"
}
ListElement {
name: "Joey"
type: "Kangaroo"
age: 1
size: "Medium"
}
ListElement {
name: "Kimba"
type: "Bunny"
age: 65
size: "Large"
}
ListElement {
name: "Rover"
type: "Dog"
age: 5
size: "Large"
}
ListElement {
name: "Tiny"
type: "Elephant"
age: 15
size: "Large"
}
}

Qt学习-ListView的拖拽的更多相关文章

  1. ListView列表拖拽排序

    ListView列表拖拽排序能够參考Android源代码下的Music播放列表,他是能够拖拽的,源代码在[packages/apps/Music下的TouchInterceptor.java下]. 首 ...

  2. QT 标题栏隐藏可拖拽

    这个也是我网上找到了 为了方便,记录一下 void mousePressEvent(QMouseEvent *e); void mouseMoveEvent(QMouseEvent *e); void ...

  3. Android学习系列(11)--App列表之拖拽ListView(下)

    接着上篇Android学习系列(10)--App列表之拖拽ListView(上)我们继续实现ListView的拖拽效果. 7.重写onTouchEvent()方法.     在这个方法中我们主要是处理 ...

  4. Android学习系列--App列表之拖拽ListView(下)

    接着上篇Android学习系列(10)--App列表之拖拽ListView(上)我们继续实现ListView的拖拽效果. 7.重写onTouchEvent()方法.     在这个方法中我们主要是处理 ...

  5. QT笔记之自定义窗口拖拽移动

    1.QT自定义标题栏,拖拽标题栏移动窗口(只能拖拽标题,其他位置无法拖拽) 方法一: 转载:http://blog.sina.com.cn/s/blog_4ba5b45e0102e83h.html . ...

  6. Qt图形视图体系结构示例解析(视图、拖拽、动画)

    本博的示例来自与QT Example:C:\Qt\Qt5.9.3\Examples\Qt-5.9.3\widgets\graphicsview\dragdroprobot 将通过分析示例完成主要功能: ...

  7. QT学习之windows下安装配置PyQt5

    windows下安装配置PyQt5 目录 为什么要学习QT 命令行安装PyQt5以及PyQt5-tools 配置QtDesigner.PyUIC及PyRcc 为什么要学习QT python下与界面开发 ...

  8. Android 可拖拽的GridView效果实现, 长按可拖拽和item实时交换

    转帖请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17718579),请尊重他人的辛勤劳动成果,谢谢! 在And ...

  9. QML之窗口(无边框、透明及拖拽)

    1.无边框 Qt Quick 2.0 中 QQuickView代替了1.0中的QDeclarativeView. 无边框窗口代码如下: QQuickView viwer; //QQuickView继承 ...

随机推荐

  1. 宝,我今天CR了,C的什么R? 走过场的CR

    原创:猿天地(微信公众号ID:cxytiandi),欢迎分享,转载请保留出处. CodeReview我相信目前很多公司都会有这么一个流程,关键是这个流程有没有用就很难讲.主要还是取决于你对CR的理解以 ...

  2. 带你掌握C++中三种类成员初始化方式

    摘要:在C++11之后,声明时初始化->初始化列表->构造函数初始化. 本文分享自华为云社区<如何编写高效.优雅.可信代码系列(3)--类成员初始化的三种方式>,原文作者:我是 ...

  3. split截取字符串

    一.根据单个分隔字符用split截取字符串:string st="GT123_1";split代码:string[] sArray=st.split("_"); ...

  4. 解决 ORA-12154 TNS无法解析指定的连接标识符

    相信作为ORACLE数据库的开发人员没有少碰到"ORA-12154: TNS: 无法解析指定的连接标识符",今天我也又碰到了类似的情况,将我的解决方法进行小结,希望能对碰到同样问题 ...

  5. uniapp uni.navigateTo 传值传对象

    uni.navigateTo({ url: '/pages/details?obj='+ encodeURIComponent(JSON.stringify(item)) }); 接收: onLoad ...

  6. oracle 日常运维

    1.查询表或存储过程.函数异常 select * from user_errors where name ='TEST_TABLE' 2.查询表是否存在 select * from user_tabl ...

  7. docker搭建数据库高可用方案PXC

    前言 本方案主要目的是学习, 该方案不太合适于企业项目 是什么? 白话点, 是个提供了必要环境的虚拟机(类似于java的导入部分包一样和c++的头文件差不多), 所以它比普通的VMWare或者Virt ...

  8. ClouderaManager安装kafka报错

    是因为默认的java heap size是50M,将broker_max_heap_size参数设置为512M后,重启kafka服务即可

  9. mysql 的基础操作

    1.建表 create table  表名( 字段一 数据类型 [列属性] , 字段二 数据类型 [列属性], ......... )[表类型][表字符集][注释]; 注意:MySQL命令终止符为分号 ...

  10. MySQL | 使用Xtrabackup进行备份和备份恢复

    备份 进行备份前需要先创建备份用户,直接使用 root 用户进行备份也行,但是这样不太规范. create user backup@'localhost' identified by '123456' ...