为用户提供的拖曳功能很直观,在很多桌面应用程序中,复制或移动对象都可以通过拖曳来完成。

基于MIME类型的拖曳数据传输是基于QDrag类的。QMimeData对象将关联的数据与其对应的MIME类型相关联。

MIME(Multipurpose Internet Mail Extension,多用途互联网邮件扩展类型)是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问时,浏览器会自动使用指定的应用程序来打开,多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。

每种MIME类型都由两部分组成,前面是数据的大类别,如声音audio、图象image等,后面定义具体的种类。

常见的MIME类型(通用型)如下:

  • 超文本标记语言文本 .html text/html
  • xml文档 .xml text/xml
  • XHTML文档 .xhtml application/xhtml+xml
  • 普通文本 .txt text/plain
  • RTF文本 .rtf application/rtf
  • PDF文档 .pdf application/pdf
  • Microsoft Word文件 .word application/msword
  • PNG图像 .png image/png
  • GIF图形 .gif image/gif
  • JPEG图形 .jpeg,.jpg image/jpeg
  • au声音文件 .au audio/basic
  • MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
  • RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
  • MPEG文件 .mpg,.mpeg video/mpeg
  • AVI文件 .avi video/x-msvideo
  • GZIP文件 .gz application/x-gzip
  • TAR文件 .tar application/x-tar
  • 任意的二进制数据 application/octet-stream

如下表所示的MimeData类函数允许检测和使用方便的MIME类型:

许多QWidget对象都支持拖曳动作,允许拖曳数据的控件必须设置QWidget.setDragEnabled()为True。另外,控件应该响应拖曳事件,以便存储所拖曳的数据。常用的拖曳事件如下表所示:

通个示例了解QDrag拖拽数据传输类,示例效果如下所示:

示例中,DragEnterEvent会验证事件的MIME数据是否包含字符串文本,如果包含字符串文本,就接收事件提出的添加文本操作,并将文本作为新条目(ltem)添加到ComboBox控件中,否则忽略此次操作。

实现代码如下所示:

import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *class Combo(QComboBox):def __init__(self, title, parent):super(Combo, self).__init__( parent)self.setAcceptDrops(True)def dragEnterEvent(self, e):print(e)if e.mimeData().hasText():e.accept()else:e.ignore() def dropEvent(self, e):self.addItem(e.mimeData().text()) class Example(QWidget):def __init__(self):super(Example, self).__init__()self.initUI()def initUI(self):lo = QFormLayout()lo.addRow(QLabel("请把左边的文本拖拽到右边的下拉菜单中"))edit = QLineEdit()edit.setDragEnabled(True)com = Combo("Button", self)lo.addRow(edit,com)self.setLayout(lo)self.setWindowTitle('简单拖拽例子')if __name__ == '__main__':app = QApplication(sys.argv)ex = Example() ex.show()sys.exit(app.exec_())

Python Qt GUI设计:QDrag拖拽数据传输类(基础篇—18)相关推荐

  1. Python Qt GUI设计:QSlider滑动条类(基础篇—16)

    QSlider控件提供了一个垂直或水平的滑动条,滑动条是一个用于控制有界值的典型控件,它允许用户沿水平或垂直方向在某一范围内移动滑块,并将滑块所在的位置转换成一个合法范围内的整数值. 有时候这种方式比 ...

  2. Python Qt GUI设计:QMdiArea和QMdiSubWindow类实现多文档界面(拓展篇—3)

    一个典型的GUI应用程序可能有多个窗口,选项卡控件和堆栈窗口控件允许一次使用其中的一个窗口.然而,很多时候这种方法不是很有用,因为其他窗口的视图是隐藏的一种同时显示多个窗口的方法是,创建多个独立的窗口 ...

  3. Python Qt GUI设计:QPrinter打印图片类(基础篇—21)

    打印图像是图像处理软件中的一个常用功能,打印图像实际上是在QPaintDevice中画图,与平常在QWidget.QPixmap和Qlmage中画图一样,都是创建一个QPainter对象进行画图的,只 ...

  4. Python Qt GUI设计:QClipboard剪贴数据类(基础篇—19)

    QClipboard类提供了对系统剪贴板的访问,可以在应用程序之间复制和粘贴数据,它的操作类似于QDrag类,使用类似的数据类型. QApplication类有一个静态方法clipboard(),它返 ...

  5. Python Qt GUI设计:窗口布局管理方法【基础】(基础篇—5)

    目录 1.布局管理器进行布局 2.容器控件进行布局 3.geometry属性:控件绝对布局 4.sizePolicy属性:微调优化控件布局 Qt Designer提供4种窗口布局方式,分别如下: Ve ...

  6. Python Qt GUI设计:信号与槽的使用方法(基础篇—7)

    目录 1.信号与槽的概念 2.信号与槽的基础函数 2.1.创建信号函数 2.2.连接信号函数 2.3.断开信号函数 2.4.发射信号函数 3.信号和槽的使用方法 3.1.内置信号与槽的使用 3.2.自 ...

  7. Python Qt GUI设计:窗口布局管理方法【强化】(基础篇—6)

    目录 1. 水平布局类(QHBoxLayout) 2.垂直布局类(QVBoxLayout) 3.网格布局类(QGridLayout) 3.1.单一的网络布局 3.2.跨越行.列的网络布局 4.表单布局 ...

  8. Python Qt GUI设计:UI界面可视化组件、属性概述(基础篇—4)

    目录 1.界面组件 1.1.布局组件(Layouts) 1.2.分隔组件(Spacers) 1.3.按钮组件(Buttons) 1.4.表项视图(Item Views) 1.5.表项组件(Item W ...

  9. Python Qt GUI设计:QPushButton、QRadioButton和QCheckBox按钮类(基础篇—12)

    目录 1.QPushButton按钮类 2.QRadioButton按钮类 3.QCheckBox按钮类 在GUI设计中,按钮都是最重要的和常用的触发动作请求的方式,用来与用户进行交互操作.在PyQt ...

最新文章

  1. Spark2 ML 学习札记
  2. 中国二维码应用被国外标准垄断 信息安全问题频发
  3. 【Verilog HDL 训练】第 14 天(glitch-free的两个时钟切换电路)
  4. halcon 形状匹配
  5. mysql不同count的性能分析
  6. CentOS6.5通过jdk8.rpm文件安装JDK8
  7. 【Linux基础】kiickstart无人值守安装
  8. [Qt教程] 第13篇 2D绘图(三)绘制文字
  9. word制作电子签名
  10. 时间格式化及操作(moment.js篇)
  11. linux普通用户su root切换提示没有文件或目录
  12. 关于Chromium Embedded Framework (CEF)的编译
  13. 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F Trig Function(切比雪夫多项式)
  14. python不是有效的win32应用程序_python.exe不是有效的win32应用程序
  15. Peekaboo—站立式会议+alpha冲刺:Day1冲刺随笔
  16. PageAdmin CMS网站制作教程:如何设置会员中心权限?
  17. 交换两个变量的值的swap函数
  18. FastAPI: 极速开发Python Web应用的未来之星
  19. 计算机面试、笔试常考题
  20. Unity 用于投掷物品的一阶贝塞尔曲线

热门文章

  1. Java 数值大小比较
  2. 讯飞语音语音听写,设置识别语言
  3. win10+Linux双系统安装及一些配置问题
  4. Python 的种类以及特点
  5. Spring Cloud下微服务权限方案
  6. PyTorch 笔记(05)— Tensor 基本运算(torch.abs、torch.add、torch.clamp、torch.div、torch.mul、torch.pow等)
  7. Go 学习推荐 —(Go by example 中文版、Go 构建 Web 应用、Go 学习笔记、Golang常见错误、Go 语言四十二章经、Go 语言高级编程)
  8. QtCreator动态编译jsoncpp完美支持x86和arm平台
  9. webform里的验证控件
  10. 快速开发rails、==常用插件==