更改ItemData的内容

时间:2010-03-09 10:51:36

标签: c++ qt

我在QStandardListItems中存储自定义数据类型的对象。我通过调用:

来恢复这些对象
i.data(Qt::UserRole + 1).value<LiteReach>();

这只会在堆栈中创建一个新对象。我对他们做的任何改变都是暂时的。

有没有办法让基础对象存储在itemData中,以便可以直接操作? 如果不是更改itemData的首选方法?

我不希望每次修改对象时都调用setData,因为它会占用大量资源。

2 个答案:

答案 0 :(得分:1)

您可以使用允许访问具体数据对象的指针,而不是将整个数据复制到上面的QVariant中。

问题是value()会返回您数据的副本。因此,如果您进行任何修改,一旦从堆栈中删除副本,它们就会消失。

如果你不想使用指针,我想你必须坚持使用setData()

答案 1 :(得分:0)

我的印象是QVariant类不适合指针存储。

但是,如果你真的想这样做,你总是可以做类似

的事情
LiteNode* myPtr = new LiteNode;
QVariant v(reinterpret_cast<quint32>(myPtr)); //or quint64 for 64-bit apps
myPtr = reinterpret_cast<LiteNode*>(v.value<quint32>());

这样你甚至不必将对象类型声明为Qt元类型。