【发布时间】:2015-01-16 17:55:48
【问题描述】:
我如何接收QStandardItem 被拖放到另一个 QStandardItem 上的通知,从而成为后者的子项?
我认为我可以通过重新实现 QStandardItemModel.moveRows 来做到这一点,但它不会在 drop 后被调用 :( 下面是我正在尝试做的一个示例。要测试,运行程序并删除一个将树视图中的项目移到另一个上。如果它有效,您应该会在控制台中看到确认 moveRows 已被调用。
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class Model(QStandardItemModel):
def moveRows(
self, source_parent, source_row, count, destination_parent,
destination_child):
print(
'Moving {} row(s) from row {} of parent {} to row {} of parent {}'
.format(
count, source_row, source_parent, destination_child,
destination_parent)
)
super().moveRows(
source_parent, source_row, count, destination_parent,
destination_child)
return True
def _create_item(text):
item = QStandardItem(text)
flags = Qt.ItemIsDragEnabled | Qt.ItemIsSelectable | Qt.ItemIsEnabled | Qt.ItemIsDropEnabled
item.setFlags(flags)
return item
model = Model()
model.appendRow([_create_item('Item 1')])
model.appendRow([_create_item('Item 2')])
app = QApplication([])
view = QTreeView()
view.setDragDropMode(view.InternalMove)
view.setModel(model)
view.show()
app.exec_()
【问题讨论】:
标签: qt python-3.x drag-and-drop pyqt pyqt5