Как сортировать QList в Qt?

у меня есть следующая структура данных.

QList<QVariant> fieldsList

Как я могу отсортировать этот список? Этот список содержит строки. Я хочу отсортировать fieldList в алфавитном порядке?

5 ответов


Я бы сделал сортировку следующим образом:

 // 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);
 }

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

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

ссылки: сайт


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;
        }
    }
}    

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

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

но он несет в себе довольно много опасности! Потому что вам может потребоваться сравнить несовместимые значения


С 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