【发布时间】:2018-10-01 18:15:11
【问题描述】:
我需要将带有 QStandardItemModel 的 QTreeView 中的项目拖放到 QLineEdit 中。
我对如何从 QTreeView 获取数据有点迷茫。假设这与重新实现 dropMimeData 方法有关,但处理 mimeData 不是我经常做的事情(或完全理解这件事)。
这里有一段简单的示例代码,我需要将 MyTreeView 中的项目拖到 MyLineEdit 中,并将文本设置为项目文本。
from PySide.QtCore import *
from PySide.QtGui import *
class MyWidget(QWidget):
def __init__(self):
super(MyWidget, self).__init__()
model = MyModel()
view = MyTreeView()
view.setModel(model)
lineEdit = MyLineEdit()
model.addItem('My Item')
model.addItem('My Item2')
layout = QVBoxLayout()
layout.addWidget(view)
layout.addWidget(lineEdit)
self.setLayout(layout)
class MyLineEdit(QLineEdit):
def __init__(self):
super(MyLineEdit, self).__init__()
self.setAcceptDrops( True )
def dragEnterEvent(self, event):
data_type = "application/x-qstandarditemmodeldatalist"
if event.mimeData().hasFormat(data_type):
event.accept()
else:
event.ignore()
def dropEvent(self, event):
data_type = "application/x-qstandarditemmodeldatalist"
if event.mimeData().hasFormat(data_type):
#Get the QStandardItem text somehow?
item_text = 'Get the text somehow'
self.setText(item_text)
class MyModel(QStandardItemModel):
def __init__(self):
super(MyModel, self).__init__()
def addItem(self, text):
root_item = self.invisibleRootItem()
item = QStandardItem(text)
root_item.appendRow(item)
class MyTreeView(QTreeView):
def __init__(self):
super(MyTreeView, self).__init__()
self.setDragEnabled( True )
widget = MyWidget()
widget.show()
【问题讨论】:
标签: python drag-and-drop pyqt pyside qtreeview