【发布时间】:2020-08-27 22:00:16
【问题描述】:
我正在使用带有 MyTreeModel(继承自 QAbstractItemModel)的 TreeView。该模型由文档中出现的带有节点的树结构提供。
https://doc.qt.io/qt-5/qtwidgets-itemviews-simpletreemodel-example.html
https://doc.qt.io/qt-5/qtwidgets-itemviews-editabletreemodel-example.html
https://doc.qt.io/qt-5/model-view-programming.html#using-drag-and-drop-with-item-views
我已经完美地实现了树元素之间拖放的整个主题。正如文档所说的那样,我为它重新实现了 mimeData、mimeTypes 和 dropMimeData。
视频: https://mega.nz/#!bkoTDQSI!YgVn6jIAPJ86fhexzsGySbhrPwQAK5IwlTTeb5L-sQ4
问题是我想在与被丢弃的项目相关的丢弃后立即以编程方式执行操作。
我想在drop后展开item,我想选择它。右边的view依赖于currentIndex。
我什么都试过了。之后进行选择:
- 插入行
- 数据已更改
- 当前已更改
- 更改事件
- dropEvent
- 事件过滤器
没有任何效果,因为如果我尝试在这些方法之后更改选择,我会破坏 Qt 内部,导致未终止的 drop 无法正常工作。我需要等待所有从 drop 派生的信号完成才能执行选择和展开命令。
我很绝望,我已经观察了 TreeWidget 的行为方式,并且遇到了和我一样的问题:当 drop 时,选择的行是错误的并且节点折叠了。
【问题讨论】:
-
我真诚的建议是重新考虑您对树视图的使用。它们通常很难编程(作为更深奥的 UI 组件之一),实际上也很难使用。还有其他方法可以完成您想要的吗?我已经实现了很多树视图控件,它们很少像你想象的那样有趣!抱歉,如果这不是您希望的技术回复,但这是我的建议 :) 哦,睡一觉...
-
如何使用 QTimer::singleShot 来执行选择/扩展操作(超时时间很短),例如行插入?该操作应在有关放置操作的 Qt 信号/事件之后排队
标签: python pyqt drag-and-drop pyside2 qtreeview