Qt 自定义model实现文件系统的文件名排序

  前段时间,需要做一个功能是要做文件系统的排序的功能。由于是自己写的model, 自己定义的数据结构。最初的想法只有一个自己去实现文件夹跟文件名的排序算法,不过感觉比较费时间。后来想到的是QFileSystemModel就是Qt标准的文件系统的model,可以把里面关于排序的算法提出来,没有必要重复造轮子。看了一下QFileSystemModel的源码,找到的排序算法如下(主要单元在qfilesystemmodel.cpp):

  1)文件系统的文件名排序主要涉及到文件夹跟文件的顺序(文件夹要排在文件前),文件大小的排序,文件类型,修改时间的排序

  2)QFileSystemModel重写了sort

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);  

 

 

  里面首先通过一个QList<QPair<QFileSystemModelPrivate::QFileSystemNode*, int> >把所有的结点取出来的,然后调用

[cpp] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. d->sortChildren(column, index(rootPath()));   


   对取出来的数据进行排序,sortChildren里对是否属于当前路径的子进行过滤。然后调用QFileSystemModelSorter对里面的结点进行排序。调用的是stl 的std:sort,排序的算法调用的QFileSystemModelSorter的。这里的算法可以整个提出来。算法的细节就没有再继续下去了。

  3)自己实现的model可以同样参考这样的流程:重写sort文件,把当前路径的子提出来了,然后调用QFileSystemModelSorter的排序算法进行排序,将排序出来的结点,重新构造新的结点给model就可以了。
  Qt源码里还有很多东西值得借鉴的,是一个大宝库。

 

http://blog.csdn.net/hpjx1987/article/details/39753863

posted @   findumars  Views(2156)  Comments(0Edit  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2015-10-10 前端篇: 前端演进史
2015-10-10 找一款防文件或文件夹误删除,移动,修改的软件
2015-10-10 Ubuntu 使用hdparm查看硬盘的型号和读取速度
2015-10-10 盘点我用过的那些网盘(那些年,我们一起玩的网盘)
2015-10-10 Win8/8.1/10获得完整管理员权限的方法
2014-10-10 Qt如何调用VS编写的动态链接库(dll文件)
2014-10-10 编译FreePascal和Lazarus
点击右上角即可分享
微信分享提示