QTreeView-等待拖放完成以执行其他操作

时间:2020-05-12 06:37:08

标签: python pyqt drag-and-drop pyside2 qtreeview

我正在将TreeView与MyTreeModel(从QAbstractItemModel继承)一起使用。该模型由具有节点的树形结构填充,该结构如文档中所示。

我完全实现了树元素之间拖放的整个主题。正如文档所说的那样,我已经为其重新实现了mimeData,mimeTypes和dropMimeData。

视频: https://mega.nz/#!bkoTDQSI!YgVn6jIAPJ86fhexzsGySbhrPwQAK5IwlTTeb5L-sQ4

问题是我想在与被删除的项目相关的位置下降之后立即以编程方式执行操作。

我要在拖放后展开该项目,然后选择它。右侧的视图取决于currentIndex。

我已经尝试了一切。在以下时间进行选择:

  • rowsInserted
  • dataChanged
  • currentChanged
  • changeEvent
  • dropEvent
  • eventFilter

什么都不起作用,因为如果我尝试在这些方法之后更改选择,则会破坏Qt内部,导致未终止的液滴无法正常工作。我需要等待所有从drop发出的信号完成才能执行select and expand命令。

我很拼命,我已经看过TreeWidget的行为方式,并遇到了与我相同的问题:进行放置时,选择的行是错误的,并且节点已折叠。

1 个答案:

答案 0 :(得分:-1)

他们已经在Qt论坛上为我解决了。

我通过在QtCore.Qt.QueuedConnection中添加参数connect连接了自定义信号。

解决方法:
https://forum.qt.io/topic/114716/treeview-wait-until-the-drop-is-complete-to-perform-another-action/3

  1. 我不确定为什么要破坏任何东西。根据Qt的要求,在model test中运行模型以确保其100%实现 期望
  2. 在您的Qt::QueuedConnection实例中添加connect作为第5个参数应确保您的代码在移动后被执行 完成并将控制权交还给Qt的事件循环