14
我使用QTableView
顯示QAbstractTableModel:如何按列排序QTableView?
#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();
}
的問題是,結果是完全一樣的,當我使用:
table.sortByColumn(0, Qt::AscendingOrder);
或
table.sortByColumn(0, Qt::DescendingOrder);
或
table.sortByColumn(1, Qt::AscendingOrder);
或
table.sortByColumn(1, Qt::DescendingOrder);
我在做什麼錯?
謝謝!有用!但是我做錯了什麼?爲什麼我的代碼無法工作?我已經閱讀了QTableView和QAbstractTableModel的文檔,但沒有找到原因。 – 2012-07-23 06:32:12
如果我正確理解這一點,QTableView只是調用QAbstractTableModel的空sort()函數?它本身沒有進行任何投票? – 2012-07-23 06:49:12
是的。 QSqlTableModel確實有一個排序實現iirc,所以排序工作沒有代理模式。但是,由於您使用的是自己的模式,你需要一個QSortFilterProxyModel其中 - 顧名思義 - 確實有一個排序的實現也是如此。 – 2012-07-23 08:59:05