我正在使用TreeView和MyTreeModel(继承自QAbstractItemModel)。这个模型是由一个树形结构提供的,它的节点在文档中出现。
https:/doc.qt.ioqt-5qtwidgets-itemviews-simpletreemodel-example.html。
https:/doc.qt.ioqt-5qtwidgets-itemviews-editabletreemodel-example.html。
https:/doc.qt.ioqt-5model-view-programming.html#using-drag-and-drop-with-item-views。
我已经完美地实现了整个树的元素之间的拖拽主题。正如文档中所说的那样好,我为它重新实现了mimeData、mimeTypes和dropMimeData。
它的视频。https:/mega.nz#!bkoTDQSI!YgVn6jIAPJ86fhexzsGySbhrPwQAK5IwlTTeb5L-sQ4。
问题是,我想在下拉后立即对下拉的项目进行编程操作。
我想在下拉后展开项目并选择它。 右边的视图取决于currentIndex。
我已经尝试了所有的方法。使选择后。
什么都不行,因为如果我试图在这些方法之后改变选择,我就会在里面破坏Qt导致未终止的drop不能很好的工作。我需要等待所有从drop衍生出来的信号完成后才能执行选择和展开命令。
我很绝望,我看了TreeWidget的表现,和我有同样的问题:当drop时,选择的行是错误的,节点折叠了。
他们已经在Qt论坛上为我解决了这个问题。
我已经通过添加参数 QtCore.Qt.QueuedConnection
在 connect
.
这里的解决方案。https:/forum.qt.iotopic114716treeview-wait-untilthe-drop-is-complete-to-perform-another-action3。
- 我不知道为什么任何东西都会坏。运行你的模型,通过 模型测试 以确保它的实现100%符合Qt的期望。
- 添加
Qt::QueuedConnection
作为你的第五个论点connect
Ststement应该确保你的代码在移动完成后被执行,并将控制权交还给Qt的事件循环。