2010-07-12 342 views
1

它有点奇怪我看不到实际更改QStandardItemModel的“数据”的方法。例如:Qt获取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)); 

因此,我将实际添加一个std ::向量,其编号为1到模型的索引{0,0}。但是,我怎么会从没有访问TestStruct实例的地方向TestStruct的向量添加另一个数字?

“数据”函数返回一个QVariant,它可以作为TestStruct被转换,但它是一个副本,我需要一个参考...得到它?

+0

此外,将结构作为QStandardItemModel中的项目后面的基本原理是什么?无论如何,你将无法直接在任何视图中使用它。你为什么这样做? – liaK 2010-07-12 07:21:07

+0

我使用代表正确显示项目,因为我想。举个例子,假设你有一个拥有自己的可用颜色的汽车列表,并且你想要在QTableView中渲染它,但是当然,因为一辆汽车可以有许多可用的颜色,并将它们显示为组合框?你会怎么做?我对QT非常陌生。 – 2010-07-12 15:35:53

回答

1

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

解决方法是,您可以通过输入QVariant来获得struct。然后修改你的testVector

经过修改后,调用再次

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

其中newTest是你struct与修改后的矢量

希望它有帮助。

相关问题