Принятие капель на QGraphicsScene - PullRequest
7 голосов
/ 14 ноября 2010

Я пытаюсь реализовать drag'n'drop для 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.

Как я могу принять капли на графической сцене?

1 Ответ

9 голосов
/ 12 декабря 2010

Хитрость здесь в том, чтобы ТАКЖЕ принять событие в QGraphicsScene :: dragMoveEvent ()!

Причина в реализации DEFAULT, которая игнорирует события перетаскивания, если под мышью нет элемента!

См. Также: http://www.qtcentre.org/threads/8022-QGraphicsScene-doesn-t-accept-Drops

Приветствия

...