因为QGraphicsView继承自QWidget,它也提供了像QWidget那样的拖拽功能。
另外,为了方便,Graphics View框架也为场景以及每个item提供拖拽支持。当视图接收到拖拽事件,它可转化为QGraphicsSceneDragDropEvent,再发送到场景。场景接管这个事件,把它发送到光标下接受拖拽的第一个item。 从一个item开始拖拽时,创建一个QDrag对象,传递开始拖拽的那个widget的指针。Items可以同时被多个视图观察,但只有一个视图可以开始拖拽。
拖拽在多数情况下是从按下鼠标或是移动鼠标开始的,因此,在 mousePressEvent()或mouseMoveEvent()中,你可以从事件中得到那个原始的widget指针,例如:
C++ Code
1
2
3
4
5
6
7
8
voidCustomItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
QMimeData *data =newQMimeData;
data->setColor(Qt::green);
QDrag *drag =newQDrag(event->widget());
drag->setMimeData(data);
drag->start();
}
为了在场景中获取拖拽事件,你应重新实现QGraphicsScene::dragEnterEvent()和在QGraphicsItem的子类里任何