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

时间:2016-10-15 14:00:20

标签: c++ qt qsort qlist

我有一个名为QList<QStringList>的{​​{1}},其中每个sortme中的第一个QString是一个有效的整数作为字符串,例如:

QStringList

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

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

然后:

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

我很遗憾,因为编译器抱怨&#34;错误:没有匹配函数来调用&#39; qSort(QList :: iterator,QList :: iterator,)&#39;&#34;&#34 ;即使我尝试对qSort(sortme.begin(), sortme.end(), qslLessThan); QList<QStringList>进行排序,也是如此。

1 个答案:

答案 0 :(得分:3)

首先,qsort()所需的函数必须是原始函数,而不是任何类的成员。其次,这个比较函数必须采用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();
}