当我这样做时:
Q_DECLARE_METATYPE(MyType*);
MyType* myData = new MyType;
QStandardItem* stdItem = new QStandardItem;
QVariant var;
var.setValue(myData);
stdItem->setData(var);
stdItem
取得myData
的所有权吗?或者我如何在Qt中使用QStandardItem
和QVariant
,以确保在QVariant
被删除时删除QStandardItem
所拥有的用户定义数据类型来自QTreeView
?
答案 0 :(得分:1)
不,它不需要所有权。
将变体复制到标准项中,它不知道变体本身包含指针。
变体也复制指针,它也不占用所有权。
解决此问题的一种方法是不在变体中存储原始指针,而是使用智能指针
例如。 std::shared_ptr
如果你的编译器对C ++ 11来说足够新,或者QSharedPointer
如果不是。{/ p>
另一个选择是不使用QStandardItemModel
,而是使用对您的数据进行操作的自定义模型,从而控制您希望如何处理存储和所有权。