У меня есть класс, который наследует от 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()
а также endResetModel()
, но это не работает. Эти вызовы должны сообщать всем представлениям, что им нужно перерисовать. Я думал о dataChanged()
, но это выглядит как странный обходной путь (я мог бы иметь больше столбцов, чем предыдущий набор данных) для сброса представления.
Задача ещё не решена.
Других решений пока нет …