1

QStandardItemModel の「データ」を実際に変更する方法が見えないのは少し奇妙です。例えば:

struct TestStruct {
    std::vector<int> testVector;
    void addNumber(int i){  
        //this method will modify the member vector
    }
};
Q_DECLARE_METATYPE(TestStruct)

QStandardItemModel* model = QStandardItemModel(1,1);
QModelIndex index = model->index(0,0);
TestStruct test;
test.addNumber(1);
model->setData(index, qVariantFromValue(test));

これで、モデルのインデックス {0,0} に番号 1 の std::vector を効果的に追加したことになります。しかし、TestStruct インスタンスにアクセスできなくなった場所から、その TestStruct のベクトルに別の数値を追加するにはどうすればよいでしょうか?

「データ」関数は、TestStruct としてキャストできる QVariant を返しますが、それはコピーであり、参照が必要です... 取得しますか?

4

1 に答える 1

1

はい、参照ではなく値のみを返します。

これを回避するには、 を型structキャストすることで を取得できますQVariant。次に、を変更しますtestVector

変更後、再度お電話ください

model->setData(index, qVariantFromValue(newTest));

変更された Vector を使用した場所newTeststructどこですか。

それが役に立てば幸い。

于 2010-07-12T07:15:32.383 に答える