0

から継承するクラスがあります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()たが、ビューをリセットするための奇妙な回避策のようです (以前のデータセットよりも多くの列を持つことができます)。

4

0 に答える 0