我試圖實現一個按照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()
時。
在[本](http://stackoverflow.com/questions/6568161/qt-sorting-is-wrong-when-using-qsortfilterproxymodel-on-number-strings-and-gett#comment7744654_6569116)評論它說這會是低效的。 你說我可以在沒有創建自己的類的情況下設置一個角色,怎麼樣? – gartenriese
這是在不同的情況下。如果你提高了性能,那麼你應該通過繼承'QAbstractTableModel'而不是'QStandardItemModel'來提供自己的模型,但是可能會對你很難。 –
感謝您的提示,我想出了自己的解決方案。現在它適用於我。 – gartenriese