我创建了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拖放操作后发生内存泄漏?
还有另一种方法可以找到拖放操作的终点吗?
最佳答案
也许为时已晚-但是您不能只继承QMimeData
并在析构函数中执行某些操作吗?
当然应该是小的安全代码-在析构函数中引发异常会导致奇怪的行为:)