2016-10-15 3 views
0

로 QStringList의 첫번째 요소에 QList 를 정렬하려고 내가 가지고 QList<QStringList>QStringList의 첫 QString 예를 들어, 문자열로 유효한 정수의 sortme 이름 : Qt는 4.8 : 정수

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

qsort의 경우 std : 대신 4.8이 사용하는 것으로, 필자는 비교 함수를 원한다는 것을 이해합니다. (qsort가 '에 대한 호출에 대한 일치하는 기능 QList : 다음

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

을 컴파일러가 "오류를 불평으로 나는 분명, 뭔가를 놓친 거지 여기에 내가 쓸 필요하다고 생각 무엇 :: iterator, QList :: iterator,) ' "QList<QStringList>sortme을 정렬하려고해도 그렇습니다.

답변

3

먼저 qsort()가 요구하는 함수는 원시 함수 여야하며 모든 클래스의 멤버 여야합니다. 둘째로이 비교 함수는 비교할 QStringLists이므로 QList 참조보다는 QStringList 참조를 취해야합니다.

#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(); 
} 
+0

아, 너무 가까웠다. 나는 그것이 qstringlist comparitor라고 생각했지만 오류 메시지로 인해 변경되었다. 정적 인 것은 제가 빠진 것이 었습니다. 나는 그것을 클래스 밖으로 옮겨서 qstringlist에 다시 넣었습니다. 그리고 그것은 정상적으로 작동합니다. – fyngyrz