实战PyQt5: 100-给应用添加拖放支持( 二 )

data.setText('drag text ')

  • text( ): 返回文本数据 。
  • hasText(): 如果对象包含文本数据 , 则返回True , 否则返回False 。
  • setHtml(HTML-text) - 以HTML格式设置文本数据(MIME型文本 / html格式) 。 如:
data.setHtml(' drag HTML text')
  • html( ): 返回HTML格式的文本数据 。
  • hasHtml( ): 如果对象包含HTML格式的文本数据 , 则返回True , 否则为False 。
  • setUrls( QList url): 设置地址列表 , 参数为QUrl类的列表 。 如:
data.setUrls ([QUrl ("")])
  • urls (): 返回地址列表 。 如:
url = e.mimeData (). urls () [0] .toString ()
  • hasUrls (): 如果对象包Url地址 , 则返回True , 否则为False 。
  • setlmageData(QVarinat img): 设置图像数据 , 可以是QImage或QPixmap实例 。 如:
data.setlmageData (Qlmage("pixmap.png"))data.setlmageData (QPixmap("pixmap.png"))
  • imageData( ): 返回图像对象 。
  • haslmage( ): 如果对象包含图像数据 , 则返回True , 否则为False 。
  • setData(str mimetype,QByteData data) 设置任意类型的MIME类型数据;参数1为字符串类型 , 指定MIME类型;参数2为QByteData类实例 。 该方法可以用MIME不同类型 , 多次调用 。 如:
data.setData("text/plain",QByteArray (bytes ("Data", "utf-8")))
  • data(str mimetype): 返回mimetype类型的QByteData数据对象 。
  • hasFormat(str mimetype): 如果对象包含mimetype类型数据 , 则返回True , 否则为False 。
  • formats(): 返回包括的mimetype类型列表 。
  • removeFormat (str mimetype): 删除mimetype类型的数据 。
  • clear(): 删除所有数据 。
如果要实现特殊类型数据的拖放 , 需要创建一个QMimeData子类 , 并重载retrieveData() 和 formats()方法 。
放置在处理拖放对象之前 , 必须告诉系统该组件可以处理这些事件 。为此 , 要在控件的构造函数中 , 调用继承自QWidget类的setAcceptDrops方法 , 参数值为True 。 如:
self.setAcceptDrops(True)拖放对象的过程执行如下:
  1. 在控件的dragEnterEvent()方法中 , 检查拖动的MIME类型数据 。 如果该控件能处理此类型数据 , 则调用事件对象的acceptProposedAction( )方法 。 如果要变更操作 , 则将新事件传递给事件对象的setDropAction( )方法 , 然后调用accept( )方法 , 而不是调用acceptProposedAction( )方法 。
  2. 如果要限制控件的特定区域才能放置操作 , 必须在dragMoveEvent( )方法中处理 。 即当拖放进入到特定的区域 , 调用accept( QRect rect)方法 , 参数rect为特定区域的QRect对象 。
  3. 在控件的dropEvent(self, event)方法中 , 完成相关操作 。
在QWidget类中的下列方法可以处理在拖放过程中所发生的事件:
  • dragEnterEvent (self,event): 当拖动进入到控件区域时调用 。 通过event参数 ,可取得QDragEnterEvent实例 。
  • dragLeaveEvent(self,event): 当拖动离开控件区域时调用 。 通过event参数 ,可取得QDragLeaveEvent实例 。
  • dragMoveEvent (self, event):当拖动在控件区域移动时调用 。 通过event参数 ,可取得QDragMoveEvent实例 。
  • dropEvent (self, event): 当拖动在控件区域放开时调用 。 通过event参数 ,可取得QDropEvent实例 。
QDropEvent类有下列方法:


推荐阅读