Qt / QTableView - sortowanie niestandardowe

0

Cześć, w programie mam QTableView a w nim kilka kolumn z danymi i chce je posortować. Najpierw chce sortować względem kolumny 2, w przypadku gdy tam wartości są takie same to względem kolumny 3, później względem kolumny 1 i tak do końca według ściśle określonej kolejności.
Znalazłem informacje że potrzebuje QSortFilterProxyModel a więc stworzyłem sobie podklasę i nadpisałem funkcję

bool lessThan( const QModelIndex & left, const QModelIndex & right ) const;

tylko że w tym przypadku mam dostęp tylko do jednej kolumny, tej która zadeklarowałem wywołaniem

ui->tableView->sortByColumn( 2, Qt::AscendingOrder );

czy jest jakaś funkcja dzięki której mógłbym zastosować takie sortowanie?

edit ::
W tej chwili zauważyłem że mam dostęp do danych we wszystkich kolumnach i mogę je porównywać w pętli więc myślę że już dam sobie rade jednak gdyby ktoś miał jakąś wskazówkę bo np już coś takiego robił to będę bardzo wdzięczny ;)

0

Napisałem funkcję do sortowania wielu kolumn w taki oto sposób

bool SortFilterProxyModel::lessThan( const QModelIndex & left,
                                     const QModelIndex & right ) const
{

    for( int i = 0; i < priority_column.size(); ++i ) {

        QModelIndex l_record = sourceModel()->index( left.row(), priority_column.at( i ) );
        QModelIndex r_record = sourceModel()->index( right.row(), priority_column.at( i ) );

        QString leftData = sourceModel()->data( l_record ).toString();
        QString rightData = sourceModel()->data( r_record ).toString();

        int compare = QString::localeAwareCompare( leftData, rightData );

        if( compare != 0 ) {
            if( priority_column.at( i ) == 4 || priority_column.at( i ) == 2 )
                return leftData.toInt() > rightData.toInt();
            else
                return compare < 0;
        }
    }

    return false;
}

i w klasie mam

QList< quint32 > priority_column;

i teraz jak ustawie sobie wartości w liście np { 2, 3, 5 } to sortuje mi tylko według tych 3 kolumn w kolejności takiej jak na liście więc to jest ok ale czy to aby dobre rozwiązanie?
W klasie mam ustawione

proxy_model->setDynamicSortFilter( true );

i zauważyłem ze jak załaduje do tabeli już około 30 pozycji i rozpoczyna się sortowanie to na chwile muli mi cała aplikacje i teraz nie wiem czy to nie jest wina tego sortowania... ale tak to nie może być bo co jeśli chciałbym wczytać 50 tysięcy pozycji wypełnić tabele i posortować...

1 użytkowników online, w tym zalogowanych: 0, gości: 1