14
私はQAbstractTableModelを表示するQTableView
を使用しています: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の両方のドキュメントを読んだことがありますが、その理由は分かりませんでした。 –
これを正しく理解すると、QTableViewはQAbstractTableModelの空のsort()関数を呼び出します。それ自体は何も出されませんか? –
はい。 QSqlTableModelはソート実装iircを持っているため、ソートはプロキシモデルなしで動作します。しかし、独自のモデルを使用している場合は、QSortFilterProxyModelが必要です。これは、名前が示すように、ソート実装も備えています。 –