QxxxList 自然排序

排序問題描述:

在某一個文件夾下有很多相似的(SDxx.bin)文件 用Qt將這些文件全部掃描出來 用QTableWidget顯示出來

這些都很簡單      ^__^心虛

但是問題了 我掃描出來的文件需要排序 如果用它提供的Qt排序規則的話會出現問題

例如:我現在有20個文件

SD1.bin  ~SD20.bin 默認排序的結果會是這樣的 SD1.bin       SD10.bin       SD11.bin    . . .    SD2.bin      SD20.bin  SD3.bin  ......

SD9.bin  但是這明顯我不是我們想要的結果

所以自己需要排序讀出來的內容 

 

最開始我使用的是快速排序

在MainWindow的頭文件中申明

static void AsscendingOrder(const QFileInfo &list1,const QFileInfo &list2);

排序
        qSort(list.begin(),list.end(),&MainWindow::AscendingOrder);
int   MainWindow::AscendingOrder(const QFileInfo &list1,const QFileInfo &list2)
{
       // 如果兩個字符串的長度不相等那麼就把少的放前面
       if(list1.fileName().length() < list2.fileName().length())
        {
            return 1;
        }
       else if(list1.fileName().length() > list2.fileName().length())
       {
           return -1;
       }
        // 兩字符串相等,就升序
        else if(list1.fileName().length() == list2.fileName().length())
        {
           //qDebug()<<  list1.fileName().toLocal8Bit().data()<<"     "<<list2.fileName().toLocal8Bit().data()<<"   "<<strcmp(list1.fileName().toLocal8Bit().data(),list2.fileName().toLocal8Bit().data());
            return strcmp(list1.fileName().toLocal8Bit().data(),list2.fileName().toLocal8Bit().data());
        }
}
但是沒成功   我的猜測可能很大部分跟我的使用方法有關   

之後 我用選擇排序做的 

先將 讀出的list 放到數組裏面  再由數組來進行排序就可以了

void MainWindow::AscendingOrder( QList<QFileInfo> listFileInfo )
{
    int minIndex;
    for(int i =0;i<listFileInfo.count()-1;i++)
    {
        minIndex = i;
        for(int  j =i+1;j<listFileInfo.count();j++)
        { //後面的比前面的長 前後位置對調
            if(listFileInfo.at(j).fileName().length() < listFileInfo.at(minIndex).fileName().length())
            {
                minIndex = j;
            }
            else  if(listFileInfo.at(j).fileName().length() == listFileInfo.at(minIndex).fileName().length())
            {
                if(strcmp(listFileInfo.at(minIndex).fileName().toLatin1(),listFileInfo.at(j).fileName().toLatin1())>0)
                {
                    minIndex = j;
                }
            }
        }
        QFileInfo temp = listFileInfo.at(i);
        listFileInfo.replace(i, listFileInfo.at(minIndex));
        listFileInfo.replace(minIndex, temp);
    }
}

在此我猜測 所有的QxxxList  都可以自定義排序 方法也會說將QxxxxList 轉成Qlist<Qxxxxx>  對他就可以排序了

對於QSort的排序  我再想想 有時間再補充一下

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章