我创建了由QSortFilterProxyModel继承的自定义代理模型。我上面提到的代理模型的源模型也是QAbstractTableModel继承的自定义模型。然后我将自定义代理模型设置为QTableView。
在这个自定义代理模型中,我重新实现了mimeData(..)函数。它如下。
QMimeData* CustomProxyModel::mimeData( const QModelIndexList & rListIndexes ) const
{
QMimeData *pMimeData = new QMimeData();
//some code here
connect(pMimeData, SIGNAL( destroyed(QObject*) ), this, SLOT( OnDestroyDraggedItem() ) );
return pMimeData;
}
在Qt4.7中,用户将QTableView的项目放到某个地方后不久,就调用了OnDestroyDraggedItem()插槽。换句话说,拖放操作后很快就会删除QMimeData对象。
但是在Qt 5.1中,永远不会调用OnDestroyDraggedItem()槽。换句话说,在拖放操作之后永远不会删除QMimeData对象。
我做错了吗? 或者在拖放操作后Qt 5.1有内存泄漏吗? 有没有其他方法可以找到拖放操作的结束?
答案 0 :(得分:0)
也许有点晚了 - 但是你不能继承QMimeData
并在析构函数中做些什么吗?
应该是小而安全的代码 - 在析构函数中抛出异常会导致奇怪的行为:)