首页 > 编程语言 > 详细

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

时间:2016-10-10 23:39:01      阅读:284      评论:0      收藏:0      [点我收藏+]

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

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

  2)QFileSystemModel重写了sort

[cpp] view plain copy
 
 技术分享技术分享
  1. void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);  

 

 

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

[cpp] view plain copy
 
 技术分享技术分享
  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

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

原文:http://www.cnblogs.com/findumars/p/5947590.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!