我有一个继承自的类QAbstractTableModel
,它只是指向一个单独的类,供视图访问数据信息,如下所示:
#include "QAbstractTableModel"
class MyModel : public QAbstractTableModel
{
Q_OBJECT
public:
MyModel(QObject* parent = 0) {}
void setDataSet(std::shared_ptr<dataset> dataset) {
beginResetModel();
dataset_ = dataset;
endResetModel();
}
int rowCount(const QModelIndex &parent) const { return dataset_->rowCount(); }
int columnCount(const QModelIndex &parent) const { return dataset_->colCount(); }
QVariant data(const QModelIndex &index, int role) const
{
if (role == Qt::DisplayRole) {
return dataset_->data( index.row(), index.column() );
}
return QVariant();
}
private:
std::shared_ptr<DataSet> dataset_;
};
底层数据集会经常变化,因此我需要模型告诉视图它需要完全重绘自己。数据集可能有不同的和更多的列、行、条目等。
以上仅在列数与之前的数据集不同时有效,否则表格将继续显示之前的数据。
我应该在这里做些什么不同的事情吗?所有其他来源都指向上述对beginResetModel()
and的调用endResetModel()
,但它不起作用。这些调用应该告诉所有视图他们需要重绘。我想过dataChanged()
,但这似乎是一个奇怪的解决方法(我可以有比以前的数据集更多的列)来重置视图。