
QDrag类提供了MIME基础数据类型的拖动和释放,拖动和放下对用户拷贝和移动数据是一种直观的方式。数据的移动通过QMimeData的拖动和放下完成,设置数据是通过如下的方式:
QDrag *drag = new QDrag(this);
QMimeData *mimeData = new QMimeData;
mimeData->setText(commentEdit->toPlainText());
drag->setMimeData(mimeData);
drag->setMimeData 指定QMimeData对象到QDrag对象,此时QDrag必须在堆中被构建,因为在拖放完成之后 ,qt会清理QDrag对象。
当拖动进行时,我们可以用pixmap来代表拖动的数据,这个pixmap可以用来代表MiME 类型,我们也可以通过函数setpixmap(),来指定pixmap,而这个鼠标的焦点,我们可以通过setHotSpot来指定鼠标在拖动期间在pixmap上的位置,下面的代码将鼠标设置在底部的中心:
drag->setHotSpot(QPoint(drag->pixmap().width()/2,
drag->pixmap().height()));
源窗口和目标窗口,可以通过成员函数 source() 和 target() 查找,这两个函数决定了拖放是否是在同一个窗口。
QDrag 仅仅是处理自己的拖放操作,当拖放操作开始的时候,它适用于开发者去决定怎样去构造或者使用一个QDrag对象。
在通常情况下,通过重新实现 mousepressEvent 来判断用户是否按下鼠标按钮,重新实现 mouseMoveEvent 来检查是否需要QDrag。