什么是拖放事件?
将一个文件往应用程序窗口里拖放时,操作系统能感知这个动作,并发送系统消息到应用程序后会产生一个拖放事件。
拖放事件分为两部分,将文件拖到窗口内部和松开鼠标。
怎么处理拖放事件?
- 所有的QWidget对象都能处理拖放事件
- 通过两个函数实现事件处理(分别对应拖和放):
-void dragEnterEvent(QDragEnterEvent* event);这个事件处理程序在拖动过程中被调用,当鼠标拖动文件进入当前QWidget对象中时,拖拽事件通过参数event进行传递,如果拖拽事件被忽略后,当前QWidget对象就不会收到任何相关消息。
-void dropEvent(QDropEvent* event) ;当拖拽被放下时将会产生QDropEvent事件,通过参数event进行事件传递。
所以在拖放事件的处理上需要对拖和放两个动作进行处理。
拖放事件中的QMimeData
- QMimeData是Qt中的多媒体数据类
- 拖放事件通过QMimeData对象传递数据
- QMimeData支持多种不同类型的多媒体数据,包括文本、html数据、合法路径、图片、颜色等。
- 操作QMimeData数据对象的常用函数:
包含测试MIME数据的类型、获取MIME数据和设置MIME数据。
自定义拖放事件步骤
- 首先需要对接收拖放事件的对象调用setAcceptDrops(bool on);该属性作用为设置QWidget对象是否可以接收QDropEvent事件,默认为不接收此事件。注意:不要在拖放事件处理函数里面修改该属性。
- 重写dragEnterEvent(QDragEnterEvent* event)事件处理函数,并判断MIME数据类型
-期望数据:调用even