在 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的主要内容,如果未能解决你的问题,请参考以下文章

QGraphicsScene 的奇怪问题

在 QGraphicsView/QGraphicsScene 上显示一系列图像

关于在 QGraphicsView/QGraphicsScene 上缩放的一般建议

如何在 QGraphicsScene 上绘制填充多边形

使用 QSvgRenderer 在 QGraphicsScene 上渲染动画 QGraphicsSvgItem(s)

无法在鼠标光标下准确地在 QGraphicsScene 上绘制新项目