在 QGraphicsScene 上接受 drop
Posted
技术标签:
【中文标题】在 QGraphicsScene 上接受 drop【英文标题】:Accepting drops on a QGraphicsScene 【发布时间】:2011-05-09 19:53:00 【问题描述】:我正在尝试为QGraphicsScene
实现拖放操作。以下是我重载的事件:
void TargetScene::dragEnterEvent(QGraphicsSceneDragDropEvent *event)
bool acceptDrag = false;
const QMimeData* mime = event->mimeData();
// Is an image present?
if (mime->hasImage())
QImage img = qvariant_cast<QImage>(mime->imageData());
dragPix = QPixmap::fromImage(img);
acceptDrag = !dragPix.isNull();
event->setAccepted(acceptDrag);
void TargetScene::dropEvent(QGraphicsSceneDragDropEvent *event)
// Add dragged pixmap to scene
QGraphicsPixmapItem* newPix = this->addPixmap(dragPix);
newPix->setPos(event->pos().x(), event->pos().y());
场景仍然不会accept drops。我猜那是因为我不能在我的QGraphicsScene
上做setAcceptDrops(true)
。
如何在图形场景中接受掉落?
【问题讨论】:
【参考方案1】:这里的技巧是还接受 QGraphicsScene::dragMoveEvent() 中的事件!
原因是默认实现,如果鼠标下没有项目,则忽略拖放事件!
另请参考:http://www.qtcentre.org/threads/8022-QGraphicsScene-doesn-t-accept-Drops
干杯
【讨论】:
如果你接受dragEnterEvent()
中的drop,那么只需用一个空函数覆盖dragMoveEvent()
就足够了,以避免QGraphicsScene的默认行为。以上是关于在 QGraphicsScene 上接受 drop的主要内容,如果未能解决你的问题,请参考以下文章
在 QGraphicsView/QGraphicsScene 上显示一系列图像
关于在 QGraphicsView/QGraphicsScene 上缩放的一般建议