QML ListView实现过滤、排序、查找等
来源:互联网 发布:python 定时任务 编辑:程序博客网 时间:2024/06/05 20:24
主要利用DelegateModel, 这里的难点是怎么去遍历ListView的每一行
1、首先利用DelegateModel来建立一个简单的ListView
import QtQuick 2.0 import QtQml.Models 2.2 Rectangle { width: 200; height: 200 DelegateModel { id: visualModel model: ListModel { id:listModel; ListElement { value: "1" } ListElement { value: "2" } ListElement { value: "5" } ListElement { value: "6" } ListElement { value: "4" } ListElement { value: "3" } } delegate: Rectangle { id: item height: 25 width: 200 Text { text: value } } } ListView { id:listView; anchors.fill: parent model: visualModel } }
2、接下来的的事情就是如何去遍历他
这个时候首先通过ListModel的count去获取model的数量
count : int
The number of data entries in the model.
object get(int index)
将过程放在DelegateModel中Component.onCompleted: { var rowCount = listModel.count; for( var i = 0;i < rowCount;i++ ) { var model = listModel.get(i); console.log(model.value) } }
同样的原理实现删除、查找、排序等等
3、完整代码
import QtQuick 2.0 import QtQml.Models 2.2 Rectangle { width: 200; height: 200 DelegateModel { id: visualModel model: ListModel { id:listModel; ListElement { value: "1"; value2:"one"} ListElement { value: "2"; value2:"two"} ListElement { value: "5"; value2:"five"} ListElement { value: "6"; value2:"six"} ListElement { value: "4"; value2:"four"} ListElement { value: "3"; value2:"three"} } //删除col1中和itemData相等的值 function remove(itemData) { var rowCount = listModel.count; for( var i = 0;i < rowCount;i++ ) { var data = listModel.get(i); if(data.value == itemData) { listModel.remove(i, 1); } } } //排序(这边我只用冒泡排了序号,后面的value2懒得一起排,也可以用ListModel.move来排序,这样可以一步到位) function sort(){ var rowCount = listModel.count; for(var i = 0; i < rowCount; i++) { for(var j = 0; i + j < rowCount - 1; j++) { if(listModel.get(j).value > listModel.get(j+1).value) { var temp = listModel.get(j).value; listModel.get(j).value = listModel.get(j+1).value; listModel.get(j+1).value = temp; } } } } //通过value查找value2 function find(value1) { var rowCount = listModel.count; for( var i = 0;i < rowCount;i++ ) { var data = listModel.get(i); if(data.value == value1) { console.log(data.value2) } } } delegate: Rectangle { id: item height: 25 width: 200 Row{ Text { text: value } Text { text: value2 } } MouseArea { anchors.fill: parent onClicked: { listView.currentIndex = index; //点击 //visualModel.remove(value) //visualModel.sort(); visualModel.find(value); } } } } ListView { id:listView; anchors.fill: parent model: visualModel } }
4,、如果只是想从View上暂时的屏蔽过滤,或者分类可以使用DelegateModelGroup
阅读全文
0 0
- QML ListView实现过滤、排序、查找等
- ListView实现简单的过滤,排序等控制
- ListView实现简单的过滤,排序等控制
- QML ListView实现惰性加载
- Qml ListView实现选中操作
- QML ListView 等view的使用
- searchview 实现listview过滤
- Android: ListView排序及过滤
- Android: ListView排序及过滤
- List 采用delegate快速实现排序、查找等操作
- List采用delegate快速实现排序、查找等操作
- List<T>采用delegate快速实现排序、查找等操作
- List<T>采用delegate快速实现排序、查找等操作
- List<T>采用delegate快速实现排序、查找等操作
- QML-ListView
- EditText配合listview实现过滤
- Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- Android实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音
- JS中的访问变量的两种方式和他们的区别
- java 数据结构数组
- redis错误 : Not all 16384 slots are covered by nodes.
- R-FCN
- lvds在FPGA中的使用4
- QML ListView实现过滤、排序、查找等
- 再谈AbstractQueuedSynchronizer2:共享模式与基于Condition的等待/通知机制实现
- Android中软件的静默安装,安装完成后再自动打开新安装软件(需Root)
- 容器安全与实践
- AOE算法——超详细,超通俗讲解
- yum 三种方式
- Window环境下装linux(CentOS7)
- RMQ算法(一):ST表(Sparse Table)
- 设计模式学习(二)之工厂模式(简单工厂+工厂方法+抽象工厂)