2010-11-14 10 views
5

Sto provando a implementare drag'n'drop per un QGraphicsScene. Ecco gli appuntamenti che ho sovraccaricato:Accettare gocce su una 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 scena ancora non lo faranno accept drops. Suppongo che sia perché non posso fare setAcceptDrops(true) sul mio QGraphicsScene.

Come si accettano gocce su una scena grafica?

risposta

7

Il trucco qui è di accettare ANCHE l'evento in QGraphicsScene :: dragMoveEvent()!

Il motivo è l'implementazione DEFAULT che ignora gli eventi di trascinamento della selezione se non è presente alcun elemento sotto il mouse!

si riferiscono anche a: http://www.qtcentre.org/threads/8022-QGraphicsScene-doesn-t-accept-Drops

Acclamazioni

+0

Se si accetta il calo di '' dragEnterEvent() '' allora è sufficiente per eseguire l'override solo '' dragMoveEvent() '' con una funzione di vuoto, in modo da per evitare il comportamento predefinito di QGraphicsScene. – jcoffland

Problemi correlati