首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从QListWidget拖放到QPlainTextEdit

从QListWidget拖放到QPlainTextEdit
EN

Stack Overflow用户
提问于 2014-08-26 12:31:32
回答 1查看 850关注 0票数 1

我正在尝试实现从QListWidgetQPlainTextEdit的拖放功能。

我使用的是eventFilter,但出于某种原因,QPlainTextEdit只获取Drag事件。Drop事件从未发生过。

源代码:

代码语言:javascript
复制
from PyQt4 import QtGui, QtCore

class Window(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        widget = QtGui.QWidget(self)
        self.setCentralWidget(widget)
        layout = QtGui.QVBoxLayout(widget)
        self.listA = QtGui.QListWidget(self)
        self.textedit = QtGui.QPlainTextEdit(self)
        self.textedit.installEventFilter(self)
        self.listA.setDragEnabled(True)

        for widget in (self.listA, self.textedit):
            widget.setAcceptDrops(True)
            layout.addWidget(widget)

        for item in 'One Two Three Four Five Six'.split():
            self.listA.addItem(item)

    def eventFilter(self, source, event):
        if (event.type() == QtCore.QEvent.DragEnter and source is self.textedit):
            event.accept()
            return False
        if (event.type() == QtCore.QEvent.Drop and source is self.textedit):
            print 'Drop'
            return False
        return QtGui.QMainWindow.eventFilter(self, source, event)

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

如何处理Drop事件并将文本更正为QPlainTextEdit

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-26 13:09:08

根据这个例子,如果已成功过滤了一个事件,则需要返回True。我真的不确定,但至少这个下降看起来是有效的

代码语言:javascript
复制
from PyQt4 import QtGui, QtCore

class Window(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        widget = QtGui.QWidget(self)
        self.setCentralWidget(widget)
        layout = QtGui.QVBoxLayout(widget)
        self.listA = QtGui.QListWidget(self)
        self.textedit = QtGui.QPlainTextEdit(self)
        self.textedit.installEventFilter(self)
        self.listA.setDragEnabled(True)

        for widget in (self.listA, self.textedit):
            widget.setAcceptDrops(True)
            layout.addWidget(widget)

        for item in 'One Two Three Four Five Six'.split():
            self.listA.addItem(item)

    def eventFilter(self, source, event):
        if (event.type() == QtCore.QEvent.DragEnter and source is self.textedit):
            event.accept()
            print 'DragEnter'
            return True
        elif (event.type() == QtCore.QEvent.Drop and source is self.textedit):
            print 'Drop'
            return True
        else:
            return super(Window, self).eventFilter(source, event)

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25505922

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档