Qt 4.8:尝试将 QStringList 的第一个元素上的 QList<QStringList> 排序为整数

Qt 4.8: trying to sort QList<QStringList> on 1st element of QStringList as integer

我有一个名为 sortmeQList<QStringList>,其中每个 QStringList 中的第一个 QString 是作为字符串的有效整数,例如:

exampleQStringList << "5" << "foo" << "bar"

对于 qsort,这是 4.8 使用的而不是 std:,我知道我想要一个比较函数。这是我认为我需要写的内容:

bool MainWindow::qslLessThan(const QList<QStringList> &v1, const QList<QStringList> &v2)
{
    // here I would get the first element.toInt() and return <
    return(true);
}

然后:

qSort(sortme.begin(), sortme.end(), qslLessThan);

很明显,我遗漏了一些东西,因为编译器会抱怨 "error: no matching function for call to 'qSort(QList::iterator, QList::iterator, )'",即使我正在尝试对 QList<QStringList> 进行排序,而 sortme 就是那个。

首先,qsort() 需要的函数必须是原始函数,而不是任何 class 的成员。其次,在您的情况下,此比较函数必须采用 QStringList 引用而不是 QList 引用,因为它是您正在比较的 QStringLists。

#include <QCoreApplication>
#include <QDebug>

bool lessThan( const QStringList& v1, const QStringList& v2 )
{
    return v1.first() < v2.first();
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QList<QStringList> sortme;

    QStringList entryOne    = QStringList() << "1" << "foo1" << "bar1";
    QStringList entryTwo    = QStringList() << "2" << "foo2" << "bar2";
    QStringList entryThree  = QStringList() << "3" << "foo3" << "bar3";

    sortme << entryTwo << entryOne << entryThree;

    qSort( sortme.begin(), sortme.end(), lessThan );

    // Print out the list data so we can see that it got sorted ok
    for( int i = 0; i < sortme.size(); i++ )
    {
        QString data = sortme.at( i ).join( "," );
        qDebug() << QString( "Item %1: %2" ).arg( i + 1 ).arg( data );
    }

    return a.exec();
}