14
Ich bin mit dem QTableView
eine QAbstractTableModel anzuzeigen:Wie sortiere ich eine QTableView nach einer Spalte?
#include <QtGui/QApplication>
#include <QAbstractTableModel>
#include <QTableView>
class TestModel : public QAbstractTableModel
{
public:
int rowCount(const QModelIndex &parent = QModelIndex()) const
{
return 2;
}
int columnCount(const QModelIndex &parent = QModelIndex()) const
{
return 2;
}
QVariant data(const QModelIndex &index, int role) const
{
switch (role)
{
case Qt::DisplayRole:
{
return 4 - index.row() + index.column();
}
}
return QVariant();
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QTableView table;
TestModel model;
table.setModel(&model);
table.setSortingEnabled(true);
table.sortByColumn(0, Qt::AscendingOrder);
table.reset();
table.show();
return a.exec();
}
Das Problem ist, dass das Ergebnis ist genau das gleiche, wenn ich benutze:
table.sortByColumn(0, Qt::AscendingOrder);
oder
table.sortByColumn(0, Qt::DescendingOrder);
oder
table.sortByColumn(1, Qt::AscendingOrder);
oder
table.sortByColumn(1, Qt::DescendingOrder);
Was mache ich falsch?
Vielen Dank! Es klappt! Aber was habe ich falsch gemacht? Warum funktioniert mein Code nicht? Ich habe die Dokumentation von QTableView und QAbstractTableModel oben und unten gelesen, aber nicht herausgefunden, warum. –
Wenn ich das richtig verstehe, ruft das QTableView nur die leere sort() Funktion des QAbstractTableModels auf? Es macht keine Selbstbestimmung. –
Ja genau. QSqlTableModel verfügt über eine Sortierimplementierungsschnittstelle, sodass die Sortierung dort ohne ein Proxy-Modell funktioniert. Da Sie jedoch ein eigenes Modell verwenden, benötigen Sie ein QSortFilterProxyModel, das - wie der Name schon sagt - auch eine Sortierung implementiert. –