QDrag的使用

来源:互联网 发布:js sort 排序 编辑:程序博客网 时间:2024/04/28 13:15

QDrag类为MIME-based拖拽数据转换提供支持
在一个应用程序中,数据拖拽对用户来说失意而归直观的方法,在很多桌面环境中都作为一个应用程序之间拷贝数据的结构,在QT中拖拽主要主要围绕着QDrag类
通过拖拽来交换的数据包含在一个QMimeData对象中,这个对象通过setMimeData()来

制定,用下面的方法
    QDrag *drag = new QDrag(this);
    QMimeData *mimeData = new QMimeData;
    mimeData->setText(commentEdit->toPlainText());
    drag->setMimeData(mimeData);

 

setMimeData()指定了拖拽对象和QMimeData对象之间的关系,QDrag必须在堆上申请,必须要有一个父对象窗口,来确定QT可以在拖拽操作完成后清除QDrag对象

 

在拖拽进行过程中,可以使用图片来呈现数据,将会把光标移动到拖拽目标体上,图

片会以图标的形式展示正在被拖拽的MIME数据类型,可以通过setPixmap()来制定图标

,也可以通过setHotSpot()来设置拖拽时候图标的显示位置,例如
drag->setHotSpot(QPoint(drag->pixmap().width()/2,drag->pixmap().height()));
注:在X11下,如果图表显示位置直接在光标下面的话,当鼠标移动的时候可能不能显示

 

拖拽的资源和目标窗口可以通过source()和target()来找到,这些函数常常用来决定在同一窗口中拖拽行为是否开始和结束,因此特殊的行为可以被完成,QDrag只处理拖拽操作本身,对开发者来说,还是需要自己决定什么时候拖拽开始,一个QDrag对象如何构造,如何使用,对一个给定的窗口,通常需要重新实现mousePressEvent()来判断用户是否按下了鼠标,重新实现mouseMoveEvent()来核对一个QDrag是否被请求

 

 

Qt::DropAction QDrag::exec(Qt::DropAction supportedActions=Qt::MoveAction)
用于开始一个拖拽循环,一直等到当拖拽结束时候,返回一个数值来,拖拽行为用户

可以从指定的supportedActions中来挑选,默认的将会被从Move,Copy和copy行为中挑

选一个
QDrag::exec() 会阻塞拖动的操作,直到用户完成操作或者取消操作。它接受不同类

型的动作作为参数,返回值是真正执行的动作。这些动作的类型为 Qt::CopyAction,

Qt::MoveAction 和 Qt::LinkAction。返回值会有这三种动作,同时增加一个

Qt::IgnoreAction 用于表示用户取消了拖放。