Как отсортировать QTableView по столбцу? - программирование
Подтвердить что ты не робот

Как отсортировать QTableView по столбцу?

Я использую QTableView для отображения QAbstractTableModel:

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

The displayed widget

Проблема заключается в том, что результат будет таким же, когда я использую:

table.sortByColumn(0, Qt::AscendingOrder);

или

table.sortByColumn(0, Qt::DescendingOrder);

или

table.sortByColumn(1, Qt::AscendingOrder);

или

table.sortByColumn(1, Qt::DescendingOrder);

Что я делаю неправильно?

4b9b3361

Ответ 1

QAbstractTableModel предоставляет пустую реализацию sort().

Попробуйте сделать

TestModel model;
QSortFilterProxyModel proxyModel;
proxyModel.setSourceModel( &model );
table.setModel( &proxyModel );