Qt 自定义model实现文件系统的文件名排序
2014-10-03 09:37
363 查看
前段时间,需要做一个功能是要做文件系统的排序的功能。由于是自己写的model, 自己定义的数据结构。最初的想法只有一个自己去实现文件夹跟文件名的排序算法,不过感觉比较费时间。后来想到的是QFileSystemModel就是Qt标准的文件系统的model,可以把里面关于排序的算法提出来,没有必要重复造轮子。看了一下QFileSystemModel的源码,找到的排序算法如下(主要单元在qfilesystemmodel.cpp):
1)文件系统的文件名排序主要涉及到文件夹跟文件的顺序(文件夹要排在文件前),文件大小的排序,文件类型,修改时间的排序
2)QFileSystemModel重写了sort
里面首先通过一个QList<QPair<QFileSystemModelPrivate::QFileSystemNode*, int> >把所有的结点取出来的,然后调用
对取出来的数据进行排序,sortChildren里对是否属于当前路径的子进行过滤。然后调用QFileSystemModelSorter对里面的结点进行排序。调用的是stl 的std:sort,排序的算法调用的QFileSystemModelSorter的。这里的算法可以整个提出来。算法的细节就没有再继续下去了。
3)自己实现的model可以同样参考这样的流程:重写sort文件,把当前路径的子提出来了,然后调用QFileSystemModelSorter的排序算法进行排序,将排序出来的结点,重新构造新的结点给model就可以了。
Qt源码里还有很多东西值得借鉴的,是一个大宝库。
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的。这里的算法可以整个提出来。算法的细节就没有再继续下去了。
3)自己实现的model可以同样参考这样的流程:重写sort文件,把当前路径的子提出来了,然后调用QFileSystemModelSorter的排序算法进行排序,将排序出来的结点,重新构造新的结点给model就可以了。
Qt源码里还有很多东西值得借鉴的,是一个大宝库。
相关文章推荐
- Qt 自定义model实现文件系统的文件名排序(重定义sort函数即可。忽然开窍了:其实捕捉点击Header事件,内部重排序,全部刷新显示即可)
- Qt 自定义model实现文件系统的文件名排序
- Qt 自定义model实现文件系统的文件名排序
- (五)Qt实现自定义模型基于QAbstractItemModel
- Qt实现自定义模型基于QAbstractTableModel
- Qt系统对话框中文化及应用程序实现重启及使用QSS样式表文件及使用程序启动界面
- .NET 插件系统框架设计(二) 使用对象序列化实现自定义配置文件管理
- Qt之QHeaderView自定义排序(QSortFilterProxyModel)
- Qt系统对话框中文化及应用程序实现重启及使用QSS样式表文件及使用程序启动界面
- spark streaming 实现根据文件内容自定义文件名,并实现文件内容追加
- (四)Qt实现自定义模型基于QAbstractTableModel (一般)
- 利用Dataview实现搜索指定目录下的所有文件,以指定的条件排序(可以按文件名升降序,最后修改时间升降序)
- Qt之QHeaderView自定义排序(获取正确的QModelIndex)
- Qt实现自定义模型基于QAbstractItemModel
- spark streaming 实现根据文件内容自定义文件名,并实现文件内容追加
- spark streaming 实现根据文件内容自定义文件名,并实现文件内容追加
- FastDFS加Redis实现自定义文件名存储海量文件
- <5>c语言实现ATM存取款系统(文件、排序)
- Qt中QSortFilterProxyModel关于多列排序的实现
- Qt之QHeaderView自定义排序(QSortFilterProxyModel)