本文共 1688 字,大约阅读时间需要 5 分钟。
在很多桌面应用程序中,复制或移动对象都可以通过拖曳来完成。基于MIME类型的拖曳数据传输是基于Drag类的。
QMimeData
对象将关联的数据与其对应的MIME类型相关联。
MIME类型的数据可以简单理解为互联网上的各种资源,比如文本、音频和视频资源等,互联网上的每一种资源都属于一种MIME类型的数据。
判断函数 | 设置函数 | 获取函数 | MIME类型 |
---|---|---|---|
hasText() | text() | setText() | text/plain |
hasHtml() | html() | setHtml() | text/html |
hasUrls() | urls() | setUrls() | text/uri-list |
hasImage() | imageData() | setImageData() | image/* |
hasColor() | colorData() | setColorData() | application/x-color |
事件 | 描述 |
---|---|
DrafEnterEvent | 当执行一个拖曳控件操作,并且鼠标指针进入该控件时,这个事件将被触发。在这个事件中可以获得被操作的窗口控件,还可以有条件地接受或拒绝该拖曳操作 |
DrafMoveEvent | 在拖曳操作进行时会触发该事件 |
DrafLeaveEvent | 当执行一个拖曳控件操作,并且鼠标指针离开该控件时,这个事件将被触发 |
DropEvent | 当拖曳操作在目标控件上被释放时,这个事件将被触发 |
import sys,mathfrom PyQt5.QtWidgets import *from PyQt5.QtGui import *from PyQt5.QtCore import *class LineEdit(QLineEdit): def __int__(self): super().__init__() self.setAcceptDrops(True) #允许接收拖曳过来的内容 def dragEnterEvent(self, e): print(e) if e.mimeData().hasText(): e.accept() else: e.ignore() def dropEvent(self, e): self.setText(e.mimeData().text())class Win(QWidget): def __init__(self): super().__init__() self.setGeometry(300, 300,400, 380) self.setWindowTitle('拖曳功能') label = QLabel('请把左边的文本拖曳到右边的下拉菜单中') edit = QLineEdit() edit.setDragEnabled(True) #允许拖曳其中的内容 l = LineEdit() layout = QFormLayout() layout.addRow(label) layout.addRow(edit,l) self.setLayout(layout)if __name__ == "__main__": app = QApplication(sys.argv) form = Win() form.show() sys.exit(app.exec_())
代码分析:dragEnterEvent()
会验证事件的MIME数据是否包含字符串文本,如果包含字符串文本,就接收事件提出的添加文本操作,并将文本作为作为新条目添加到ComboBox控件中,否则忽略此次操作。
运行效果如下:
转载地址:http://hvozi.baihongyu.com/