2010-11-14 31 views
5

Estoy intentando implementar drag'n'drop para un QGraphicsScene. Aquí están los eventos que he sobrecargado:Aceptando gotas en un 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()); 
} 

La escena sigue sin accept drops. Supongo que es porque no puedo hacer setAcceptDrops(true) en mi QGraphicsScene.

¿Cómo acepto las gotas en una escena de gráficos?

Respuesta

7

El truco aquí es TAMBIÉN aceptar el evento en el QGraphicsScene :: dragMoveEvent()!

El motivo es la implementación DEFAULT que ignora los eventos de arrastrar y soltar si no hay ningún elemento debajo del mouse.

también se refieren a: http://www.qtcentre.org/threads/8022-QGraphicsScene-doesn-t-accept-Drops

Saludos

+0

Si acepta la caída en '' dragEnterEvent() '', entonces es suficiente con sólo anular '' dragMoveEvent() '' con una función de vacío, así como para evitar el comportamiento predeterminado de QGraphicsScene. – jcoffland

Cuestiones relacionadas