在QAbstractItemView中查找拖放操作的结束

时间:2014-05-17 09:05:31

标签: c++ qt drag-and-drop qt4 qt5

我创建了由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有内存泄漏吗? 有没有其他方法可以找到拖放操作的结束?

1 个答案:

答案 0 :(得分:0)

也许有点晚了 - 但是你不能继承QMimeData并在析构函数中做些什么吗? 应该是小而安全的代码 - 在析构函数中抛出异常会导致奇怪的行为:)