【问题标题】:Finding the end of a Drag and Drop operation in QAbstractItemView在 QAbstractItemView 中查找拖放操作的结束
【发布时间】: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


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多