2014-02-05 2 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

С QSort :)

Найдено следующий пример:

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()' больше, поскольку он устарел (см. [Этот другой] (http://stackoverflow.com/a/27228639/1202500)). – mozzbozz

+1

@mozzbozz 'QSet', в отличие от' QList', является неупорядоченным множеством. Хранение этих упорядоченных номеров в 'QSet', а затем преобразование его в' QList' является неочевидным способом псевдослучайного перетасовки чисел. –

0

Для QList сортировку можно использовать qSort

Если вы хотите использовать QVariant для сортировки или аналогичный у него есть некоторые камни. В зависимости от того, что вы хотели бы сделать, вы можете написать свои собственные оверлеи оператора.

НО НОНО БОЛЬШЕ ОПАСНОСТИ! Потому что вы могли бы сравнить, не совместимые значения

23

В Qt5, кажется qSort устарела. Рекомендуется использовать:

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

Ссылка: site

+0

Просто короткая заметка, которая, по-видимому, по-прежнему сохраняется в Qt4: [link] (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; 
     } 
    } 
}  
Смежные вопросы