2016-07-15 18 views
1

Ich möchte den Mauszeiger in der Position sein, wo die Maus auf das Widget oder in der Mitte des Widgets geklickt wurde.Drag & Drop auf einem QGraphicScene - Mauszeiger in der Mitte des Widgets

Zum Beispiel, wenn das Widget ein Rechteck ist, und es ist in Drag-Ereignisse erscheint es wie im Bild unten, Ereignis Ich habe in der Mitte angeklickt und begann zu ziehen:

enter image description here

Wo liegt Der rote Kreis ist der Mauszeiger jedes Mal, wo immer ich das Widget "aufnehme".

Im mousePressEvent, das tue ich so etwas wie:

void              
myQFrame::mousePressEvent(QMouseEvent* event) 
{ 
    if(event->button() == Qt::LeftButton) 
    { 
     QDrag* drag = new QDrag(this); 
     QMimeData* mimeData = new QMimeData; 

     //....other stuff 
     drag->setMimeData(mimeData); 

     QPixmap widgetPixmap(this->size()); 
     this->render(&widgetPixmap, QPoint(), QRegion(this->rect())); 
    } 
} 

Haw kann ich den Cursor gesetzt in der Mitte zum Beispiel, wenn die Widget Palisade vom Zentrum ist?

Antwort

1

QDrag::setHotSpot ist dein Freund.

UPDATE:

Stellt die Position des Hot Spot relativ zu der oberen linken Ecke der die Pixmap mit dem von Hotspot angegebenen Punkt eingesetzt.

Hinweis: In X11 kann die Pixmap möglicherweise nicht mit der Maus Bewegungen mithalten, wenn der Hot Spot dazu führt, dass die Pixmap direkt unter dem Cursor angezeigt wird.

drag->setHotSpot(QPoint(this->width()/2, this->height()/2)); 
+0

'setHotspot' ist die richtige Funktion, aber es dauert eine' QPoint' als Parameter kein 'QSize'. Die gute Lösung war: 'drag-> setHotSpot (QPoint (this -> width()/2, this -> height()/2));' Danke. Ich werde Ihre Antwort aktualisieren und sie als Lösung akzeptieren. – mtb