QTreeView - 等到下拉完成后再执行另一个动作[关闭]。

问题描述 投票:0回答:1

我正在使用TreeView和MyTreeModel(继承自QAbstractItemModel)。这个模型是由一个树形结构提供的,它的节点在文档中出现。

我已经完美地实现了整个树的元素之间的拖拽主题。正如文档中所说的那样好,我为它重新实现了mimeData、mimeTypes和dropMimeData。

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

问题是,我想在下拉后立即对下拉的项目进行编程操作。

我想在下拉后展开项目并选择它。 右边的视图取决于currentIndex。

我已经尝试了所有的方法。使选择后。

  • rowsInserted
  • 数据变更
  • 当前已更改
  • 改变事件
  • 辍学事件
  • 事件过滤器

什么都不行,因为如果我试图在这些方法之后改变选择,我就会在里面破坏Qt导致未终止的drop不能很好的工作。我需要等待所有从drop衍生出来的信号完成后才能执行选择和展开命令。

我很绝望,我看了TreeWidget的表现,和我有同样的问题:当drop时,选择的行是错误的,节点折叠了。

python pyqt drag-and-drop pyside2 qtreeview
1个回答
-1
投票

他们已经在Qt论坛上为我解决了这个问题。

我已经通过添加参数 QtCore.Qt.QueuedConnectionconnect.

这里的解决方案。https:/forum.qt.iotopic114716treeview-wait-untilthe-drop-is-complete-to-perform-another-action3。

  1. 我不知道为什么任何东西都会坏。运行你的模型,通过 模型测试 以确保它的实现100%符合Qt的期望。
  2. 添加 Qt::QueuedConnection 作为你的第五个论点 connect Ststement应该确保你的代码在移动完成后被执行,并将控制权交还给Qt的事件循环。
© www.soinside.com 2019 - 2024. All rights reserved.