2010-11-14 11 views
5

üzerinde damla kabul etme QGraphicsScene için drag'n'drop uygulamasını deniyorum. İşte aşırı ettik olaylardır:Bir 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()); 
} 

sahne hala accept drops olmaz. Tahminimce, QGraphicsScene numaramda setAcceptDrops(true) yapamıyorum.

Grafik sahnesindeki düşüşleri nasıl kabul ederim?

cevap

7

Burada hile, QGraphicsScene :: dragMoveEvent() içindeki olayı kabul etmektir!

Nedeni, farenin altında herhangi bir öğe yoksa sürükleme ve bırakma olaylarını yok sayan DEFAULT uygulamasıdır! Eğer dragEnterEvent (`` düşüşü kabul edersek şekilde, boş bir işlevle `o zaman` `) sadece` `dragMoveEvent (geçersiz kılmak için yeterli`) http://www.qtcentre.org/threads/8022-QGraphicsScene-doesn-t-accept-Drops

Cheers

+0

:

Ayrıca bakınız QGraphicsScene'in varsayılan davranışından kaçınmak için. – jcoffland