Python PyQt5:如何将文本从QTextEdit拖动到QlistView中?

Python PyQt5:如何将文本从QTextEdit拖动到QlistView中?,python,python-3.x,pyqt5,qtextedit,qlistview,Python,Python 3.x,Pyqt5,Qtextedit,Qlistview,我目前正在构建一个GUI,我想在其中添加从QTextEdit拖动字符串并将其放入QListView的可能性,以便删除的字符串创建一个新行 但可悲的是,我对自己应该做什么感到有点困惑。有很多例子,但我不清楚我应该做什么 据我所知,我必须重新实现函数,但现在我更像是一只无头鸡 from PyQt5 import QtCore, QtGui, QtWidgets import testing_ground_lib, sys class ListModel(QtGui.QStandardItemM

我目前正在构建一个GUI,我想在其中添加从QTextEdit拖动字符串并将其放入QListView的可能性,以便删除的字符串创建一个新行

但可悲的是,我对自己应该做什么感到有点困惑。有很多例子,但我不清楚我应该做什么

据我所知,我必须重新实现函数,但现在我更像是一只无头鸡


from PyQt5 import QtCore, QtGui, QtWidgets
import testing_ground_lib, sys


class ListModel(QtGui.QStandardItemModel):
    def supportedDropActions(self):
        <MAYBE DO STUFF HERE>

    def dropMimeData(self, data, action, row, column, modelIndex):
        <MAYBE DO STUFF HERE>

class testing_ground(QtWidgets.QMainWindow, testing_ground_lib.Ui_TestWindow):

    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.setupUi(self)

        self.list_model = ListModel(0, 1, self)
        self.inputs_list.setModel(self.list_model)



sys.argv = ['']
app = QtWidgets.QApplication(sys.argv)
testing_ground = testing_ground()
testing_ground.show()
app.exec_()

在我的ListModel课上。现在我想我只需要重新实现dropMimeData,我想一切都会好起来的。如果我能做到这一点,我会更新这篇文章。

这里有一个解决方案,可以将QTextEdit中突出显示的文本拖动到QListView中,并使用该文本添加新行。子类QListView和重新实现dragEnterEvent、dragMoveEvent和dropEvent。在dropEvent中,使用QStandardItemModel.appendRow添加新项

结果:


谢谢你的帮助。我昨天晚上确实设法让一些东西工作了,但没有你的代码那么干净。非常感谢你。
    def mimeTypes(self):
        return ['text/plain']
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *

class ListView(QListView):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.setAcceptDrops(True)
        self.setModel(QStandardItemModel(0, 1))

    def dragEnterEvent(self, event):
        event.accept() if event.mimeData().hasText() else event.ignore()

    def dragMoveEvent(self, event):
        event.accept() if event.mimeData().hasText() else event.ignore()

    def dropEvent(self, event):
        if event.mimeData().hasText():
            event.setDropAction(Qt.CopyAction)
            self.model().appendRow(QStandardItem(event.mimeData().text()))
            event.accept()
        else:
            event.ignore()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = QWidget()
    hbox = QHBoxLayout(window)
    hbox.addWidget(QTextEdit())
    hbox.addWidget(ListView())
    window.show()
    sys.exit(app.exec_())