10

にドラッグアンドドロップを実装しようとしてい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());
}

シーンはまだドロップを受け入れません。私はそれができないからだとsetAcceptDrops(true)思いQGraphicsSceneます。

グラフィックシーンでドロップを受け入れるにはどうすればよいですか?

4

1 に答える 1

14

ここでの秘訣は、QGraphicsScene :: dragMoveEvent()のイベントも受け入れることです。

その理由は、マウスの下にアイテムがない場合にドラッグアンドドロップイベントを無視するDEFAULT実装です!

http://www.qtcentre.org/threads/8022-QGraphicsScene-doesn-t-accept-Dropsも参照してください。

乾杯

于 2010-12-12T13:18:33.707 に答える