问:QStandardItem是否通过QVariant获取指针的所有权?

时间:2017-03-20 02:55:16

标签: c++ qt

当我这样做时:

Q_DECLARE_METATYPE(MyType*);

MyType* myData = new MyType;

QStandardItem* stdItem = new QStandardItem;

QVariant var;
var.setValue(myData);

stdItem->setData(var);

stdItem取得myData的所有权吗?或者我如何在Qt中使用QStandardItemQVariant,以确保在QVariant被删除时删除QStandardItem所拥有的用户定义数据类型来自QTreeView

1 个答案:

答案 0 :(得分:1)

不,它不需要所有权。

将变体复制到标准项中,它不知道变体本身包含指针。

变体也复制指针,它也不占用所有权。

解决此问题的一种方法是不在变体中存储原始指针,而是使用智能指针 例如。 std::shared_ptr如果你的编译器对C ++ 11来说足够新,或者QSharedPointer如果不是。{/ p>

另一个选择是不使用QStandardItemModel,而是使用对您的数据进行操作的自定义模型,从而控制您希望如何处理存储和所有权。