14
estoy usando el QTableView
para mostrar un QAbstractTableModel:¿Cómo ordenar un QTableView por una columna?
#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();
}
El problema es que el resultado es exactamente el mismo cuando uso:
table.sortByColumn(0, Qt::AscendingOrder);
o
table.sortByColumn(0, Qt::DescendingOrder);
o
table.sortByColumn(1, Qt::AscendingOrder);
o
table.sortByColumn(1, Qt::DescendingOrder);
¿Qué estoy haciendo mal?
Gracias! ¡Funciona! Pero, ¿qué estaba haciendo mal? ¿Por qué mi código no funciona? He leído la documentación de QTableView y QAbstractTableModel arriba y abajo, pero no he averiguado por qué. –
Si entiendo esto correctamente, ¿QTableView simplemente llama a la función de clasificación vacía de QAbstractTableModel? No hace ningún movimiento por sí mismo? –
Sí exactamente. QSqlTableModel tiene una iirc de implementación de clasificación, por lo que la ordenación funciona allí sin un modelo de proxy. Sin embargo, como está utilizando un modelo propio, necesita un QSortFilterProxyModel que, como su nombre lo indica, también tiene una implementación de clasificación. –