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));

这样,我将有效地添加一个带有数字 1 的 std::vector 到模型的索引 {0,0}。但是,我如何从不再有权访问 TestStruct 实例的地方向该 TestStruct 的向量添加另一个数字?

“数据”函数返回一个 QVariant 可以转换为 TestStruct 但它是一个副本,我需要一个参考......明白了吗?

4

1 回答 1

1

是的,它只会返回值,而不是参考。

一种解决方法是,您可以struct通过 Typecasting 获得QVariant. 然后修改你的testVector.

修改后,再次调用

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

修改后的 VectornewTeststruct哪里。

希望能帮助到你。

于 2010-07-12T07:15:32.383 回答