我在QStandardListItems中存储自定义数据类型的对象。我通过调用:
来恢复这些对象i.data(Qt::UserRole + 1).value<LiteReach>();
这只会在堆栈中创建一个新对象。我对他们做的任何改变都是暂时的。
有没有办法让基础对象存储在itemData中,以便可以直接操作? 如果不是更改itemData的首选方法?
我不希望每次修改对象时都调用setData,因为它会占用大量资源。
答案 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元类型。