Reputation: 13303
I am using the QTableView
to display a 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 problem is that the result is exactly the same when I use:
table.sortByColumn(0, Qt::AscendingOrder);
or
table.sortByColumn(0, Qt::DescendingOrder);
or
table.sortByColumn(1, Qt::AscendingOrder);
or
table.sortByColumn(1, Qt::DescendingOrder);
What am I doing wrong?
Upvotes: 21
Views: 46333
Reputation: 183
For those looking to do this in Python, this works for PySide6.
import sys
from PySide6.QtCore import QAbstractTableModel, Qt, QSortFilterProxyModel
from PySide6.QtWidgets import QTableView, QApplication
class TestModel(QAbstractTableModel):
def __init__(self):
super().__init__()
def rowCount(self, index):
return 2
def columnCount(self, index):
return 2
def data(self, index, role):
if role == Qt.DisplayRole:
return 4 - index.row() + index.column()
def main():
a = QApplication(sys.argv)
table = QTableView()
model = TestModel()
proxyModel = QSortFilterProxyModel()
proxyModel.setSourceModel(model)
table.setModel(proxyModel)
table.setSortingEnabled(True)
table.sortByColumn(0, Qt.AscendingOrder)
table.reset()
table.show()
sys.exit(a.exec())
if __name__ == "__main__":
main()
Upvotes: 5
Reputation: 12600
QAbstractTableModel
provides an empty sort()
implementation.
Try doing
TestModel model;
QSortFilterProxyModel proxyModel;
proxyModel.setSourceModel( &model );
table.setModel( &proxyModel );
Upvotes: 28