接受QGraphicsScene上的丢弃

Pie*_*ter 7 qt drag-and-drop qgraphicsview

我正在尝试实现拖拽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());
}
Run Code Online (Sandbox Code Playgroud)

现场仍然不接受掉落.我猜这是因为我不能做setAcceptDrops(true)我的QGraphicsScene.

如何接受图形场景中的墨滴?

小智 9

这里的技巧是在QGraphicsScene :: dragMoveEvent()中接受事件!

原因是DEFAULT实现,如果鼠标下没有项目,则忽略拖放事件!

另请参阅:http://www.qtcentre.org/threads/8022-QGraphicsScene-doesn-t-accept-Drops

干杯

  • 如果您接受 ``dragEnterEvent()`` 中的删除,那么只需使用空函数覆盖 ``dragMoveEvent()`` 就足够了,以避免 QGraphicsScene 的默认行为。 (2认同)