【发布时间】:2014-07-05 17:56:46
【问题描述】:
我创建了由 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 在拖放操作后是否存在内存泄漏? 还有其他方法可以找到拖放操作的结束吗?
【问题讨论】:
-
您确定没有什么比被破坏的信号更好的连接方式了吗?
-
这是唯一的解决方案,我知道要找到拖放操作的结束。如果您有其他想法,请分享它
标签: c++ qt drag-and-drop qt4 qt5