我创建了由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() slot。换句话说,QMimeData对象在拖放操作后不久就会被删除。
但在Qt5.1中,OnDestroyDraggedItem()插槽从未被调用过。换句话说,在拖放操作之后,QMimeData对象永远不会被删除。
我做错了什么吗?或者Qt 5.1在拖放操作后出现了内存泄漏?有没有其他方法可以找到拖放操作的结束?
发布于 2016-06-16 06:04:53
也许有点晚了--但你不能继承QMimeData,在析构函数中做点什么吗?当然应该是小而安全的代码--在析构函数中抛出异常会导致奇怪的行为:)
https://stackoverflow.com/questions/23709529
复制相似问题