2014-02-05 111 views

回答

14

我會做下列方式排序:

// Compare two variants. 
bool variantLessThan(const QVariant &v1, const QVariant &v2) 
{ 
    return v1.toString() < v2.toString(); 
} 

int doComparison() 
{ 
    [..] 
    QList<QVariant> fieldsList; 

    // Add items to fieldsList. 

    qSort(fieldsList.begin(), fieldsList.end(), variantLessThan); 
} 
-1

隨着快速排序:)

發現下面的例子:

QSet<int> set; 
set << 20 << 30 << 40 << ... << 70; 

QList<int> list = QList<int>::fromSet(set); 
qSort(list); 

http://doc.qt.io/qt-5/qlist.html

+0

爲什麼你首先要創建一個'QSet'你再轉換爲'QList'排序?這沒有意義。你可以直接創建QList。除此之外,您不應該再使用'qSort()',因爲它已被棄用(請參閱[this other](http://stackoverflow.com/a/27228639/1202500)答案)。 – mozzbozz

+1

@mozzbozz與QList不同,QSet是一個無序集合。將這些有序數字存儲在'QSet'中,然後將其轉換爲'QList'是僞隨機混洗數字的一種不明顯的方式。 –

0

QList排序您可以使用qSort

如果你喜歡用QVariant進行排序或類似它有一些絆腳石。 取決於你喜歡做什麼,你可以編寫自己的操作符覆蓋。

但是它有很大的危險!因爲你可能需要比較不兼容的值

23

在QT5,似乎qSort已被棄用。我們推薦使用:

#include <algorithm> 
QList<QVariant> fieldsList; 
std::sort(fieldsList.begin(), fieldsList.end()); 

參考:site

+0

只是一個簡短的說明,顯然它仍然是有效的Qt4:[鏈接](http://doc.qt.io/qt-4.8/qtalgorithms.html#qSort) – Cerno

+0

謝謝,我已經更新了我的答案。 – albertTaberner

0
int n; 
int i; 
for (n=0; n < fieldsList.count(); n++) 
{ 
    for (i=n+1; i < fieldsList.count(); i++) 
    { 
     QString valorN=fieldsList.at(n).field(); 
     QString valorI=fieldsList.at(i).field(); 
     if (valorN.toUpper() > valorI.toUpper()) 
     { 
      fieldsList.move(i, n); 
      n=0; 
     } 
    } 
}  
相關問題