2010-11-14 7 views
5

Ich versuche, Drag'n'Drop für eine QGraphicsScene zu implementieren. Hier sind die Ereignisse, die ich überlastet haben:Akzeptieren von Tropfen auf einer 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()); 
} 

Die Szene nach wie vor wird nicht accept drops. Ich vermute, das ist, weil ich setAcceptDrops(true) auf meinem QGraphicsScene nicht tun kann.

Wie akzeptiere ich Tropfen in einer Grafikszene?

Antwort

7

Der Trick hier ist, das Ereignis auch in QGraphicsScene :: dragMoveEvent() zu akzeptieren!

Der Grund ist die DEFAULT-Implementierung, die Drag & Drop-Ereignisse ignoriert, wenn sich kein Element unter der Maus befindet!

Siehe auch: http://www.qtcentre.org/threads/8022-QGraphicsScene-doesn-t-accept-Drops

Prost

+0

Wenn Sie die Tropfen in '' dragEnterEvent() 'akzeptieren' dann genug, es ist nur außer Kraft zu setzen '' dragMoveEvent() '' mit einer leeren Funktion, so wie um das Standardverhalten von QGraphicsScene zu vermeiden. – jcoffland