14
Sto usando il QTableView
per visualizzare un QAbstractTableModel:Come ordinare un QTableView per colonna?
#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();
}
Il problema è che il risultato è esattamente lo stesso quando uso:
table.sortByColumn(0, Qt::AscendingOrder);
o
table.sortByColumn(0, Qt::DescendingOrder);
o
table.sortByColumn(1, Qt::AscendingOrder);
o
table.sortByColumn(1, Qt::DescendingOrder);
Che cosa sto facendo di sbagliato?
Grazie! Funziona! Ma cosa stavo facendo male? Perché il mio codice non funziona? Ho letto la documentazione di QTableView e QAbstractTableModel su e giù, ma non ho scoperto il motivo. –
Se ho capito bene, QTableView chiama semplicemente la funzione di ordinamento vuoto() di QAbstractTableModel? Non fa soting da solo? –
Sì esattamente. QSqlTableModel ha un'implementazione di tipo iirc, quindi l'ordinamento funziona senza un modello proxy. Tuttavia, poiché si utilizza un proprio modello, è necessario un QSortFilterProxyModel che, come suggerisce il nome, ha anche un'implementazione di ordinamento. –