• 496阅读
  • 0回复

[讨论]QFileSystemModel重写后如何实现排序 [复制链接]

上一主题 下一主题
离线lwei24
 

只看楼主 倒序阅读 楼主  发表于: 2023-05-23
如题,重写QFileSystemModel的具体代码如下:
  1. //FileSystemModel.cpp
  2. FileSystemModel::FileSystemModel(QObject *parent)
  3.     : QFileSystemModel(parent)
  4. {
  5.     this->setRootPath(QString(""));
  6.     this->setFilter(QDir::Drives | QDir::AllDirs | QDir::NoDotAndDotDot |QDir::Dirs|QDir::Hidden|QDir::System);
  7. }
  8. int FileSystemModel::columnCount(const QModelIndex &parent) const
  9. {
  10.     Q_UNUSED(parent);
  11.     return 1;  
  12. }
  13. QVariant FileSystemModel::data(const QModelIndex &index, int role) const
  14. {
  15.     if(index.isValid())
  16.     {
  17.         if(role == Qt::DecorationRole)  
  18.         {
  19.             return QVariant();
  20.         }
  21.         else if(role == Qt::DisplayRole)
  22.         {
  23.             if(this->fileInfo(index).isRoot())
  24.             {
  25.                 return QDir::toNativeSeparators(QString("%1").arg(this->fileInfo(index).absolutePath()));
  26.             }
  27.         }
  28.     }
  29.     return QFileSystemModel::data(index, role);
  30. }
  31. void FileSystemModel::sort(int column, Qt::SortOrder order)
  32. {
  33.     //此处如何排序,从C:\到Z:\由上而下显示在QTreeView上
  34.     emit layoutAboutToBeChanged();
  35.     const int nodeCount = this->rowCount();
  36.     for(int i = 0; i < nodeCount; ++i)
  37.     {
  38.          for(int j = i+1; j < nodeCount; ++j)
  39.          {
  40.             char s1 = this->index(i, column).data().toString().at(0).unicode();
  41.             char s2 = this->index(j, column).data().toString().at(0).unicode();
  42.         
  43.          }
  44.     }
  45.     QModelIndexList newList;
  46.     const int numOldNodes = this->rowCount();
  47.     newList.reserve(numOldNodes);
  48.     emit layoutChanged();
  49. }
  50. //main.cpp
  51. FileSystemModel *model = new FileSystemModel;
  52. QTreeView *treeView = new QTreeView(this);
  53. treeView->setModel(model);
  54. treeView->show();
排序后,QTreeView上显示如下:
C:\
D:\
E:\
...
Z:\
从上到下,由C:\开始递增,若磁盘不存在,则不显示,以上如何重写sort能实现FileSystemModel的排序呢?各位大佬,不知道你们有做过吗?欢迎大佬们指点一二,小弟感激不尽!!

快速回复
限100 字节
 
上一个 下一个