如何在模型数据源更改时更新视图?

时间:2015-11-03 15:42:46

标签: c++ qt qtableview qabstracttablemodel qt5.5

我有一个继承自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(),但这似乎是一个奇怪的解决方法(我可以有比以前的数据集更多的列)来重置视图。

0 个答案:

没有答案