Qt 自定义model实现文件系统的文件名排序(重定义sort函数即可。忽然开窍了:其实捕捉点击Header事件,内部重排序,全部刷新显示即可)
Posted 朝闻道
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt 自定义model实现文件系统的文件名排序(重定义sort函数即可。忽然开窍了:其实捕捉点击Header事件,内部重排序,全部刷新显示即可)相关的知识,希望对你有一定的参考价值。
前段时间,需要做一个功能是要做文件系统的排序的功能。由于是自己写的model, 自己定义的数据结构。最初的想法只有一个自己去实现文件夹跟文件名的排序算法,不过感觉比较费时间。后来想到的是QFileSystemModel就是Qt标准的文件系统的model,可以把里面关于排序的算法提出来,没有必要重复造轮子。看了一下QFileSystemModel的源码,找到的排序算法如下(主要单元在qfilesystemmodel.cpp):
1)文件系统的文件名排序主要涉及到文件夹跟文件的顺序(文件夹要排在文件前),文件大小的排序,文件类型,修改时间的排序
2)QFileSystemModel重写了sort
- void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
里面首先通过一个QList<QPair<QFileSystemModelPrivate::QFileSystemNode*, int> >把所有的结点取出来的,然后调用
- d->sortChildren(column, index(rootPath()));
对取出来的数据进行排序,sortChildren里对是否属于当前路径的子进行过滤。然后调用QFileSystemModelSorter对里面的结点进行排序。调用的是stl 的std:sort,排序的算法调用的QFileSystemModelSorter的。这里的算法可以整个提出来。算法的细节就没有再继续下去了。
Qt源码里还有很多东西值得借鉴的,是一个大宝库。
http://blog.csdn.net/hpjx1987/article/details/39753863
以上是关于Qt 自定义model实现文件系统的文件名排序(重定义sort函数即可。忽然开窍了:其实捕捉点击Header事件,内部重排序,全部刷新显示即可)的主要内容,如果未能解决你的问题,请参考以下文章
Qt实现系统桌面目录下文件搜索的GUI:功能一:文件查找与现实(下)
QML中使用自定义Model和SortFilterProxyModel实现搜索