Python Qt GUI 设计:QDrag 拖拽数据传输类(基础篇—18)
为用户提供的拖曳功能很直观,在很多桌面应用程序中,复制或移动对象都可以通过拖曳来完成。
基于 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 控件中,否则忽略此次操作。
实现代码如下所示:
版权声明: 本文为 InfoQ 作者【不脱发的程序猿】的原创文章。
原文链接:【http://xie.infoq.cn/article/efb2a530c820bf928cdf08578】。文章转载请联系作者。
评论