0

here で説明されているように、数値でソートする新しいモデルを実装しようとしました。

次のようになります。

#ifndef NUMERICMODEL_H
#define NUMERICMODEL_H

#include <QStandardItemModel>

class NumericModel : public QStandardItemModel
{
public:

    enum Role {
        SortRole=Qt::UserRole
    };

    NumericModel() {}
    ~NumericModel() {}

    QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const {

        switch ( role ) {
            case Qt::DisplayRole:
                return index.data().toString();
            case SortRole:
                return index.data().toUInt();
            default:
                return index.data().toString();
        }

    }

};

#endif // NUMERICMODEL_H

私は次のようにソートの役割を設定しています:

QSortFilterProxyModel * proxyModel = new QSortFilterProxyModel(this);
proxyModel->setSourceModel(&m_movesModel);
proxyModel->setSortRole(NumericModel::SortRole);
qDebug() << __LINE__;
ui->tableView_Moves->setModel(proxyModel);qDebug() << __LINE__;
ui->tableView_Moves->resizeColumnsToContents();qDebug() << __LINE__;

ただし、を呼び出すと、最後の行でプログラムがクラッシュしui->tableView_Moves->resizeColumnsToContents()ます。

4

2 に答える 2

0

他の回答のおかげで、データ関数が不完全であることがわかりました。考えられるすべてのケースを手動で調べる代わりに、特定のケースを要求してから、基本クラスのデータ関数を呼び出しました。

QVariant data(const QModelIndex & index, int role = Qt::DisplayRole) const {

    if (role == SortRole) {
        return index.data().toUInt();
    }

    return QStandardItemModel::data(index, role);

}
于 2015-01-07T10:34:59.047 に答える