拖放 QGraphicSscene - 鼠标光标在小部件的中心

Drag and drop on a QGraphicScene - mouse cursor in center of widget

我希望鼠标光标位于鼠标在小部件上单击的位置或位于小部件的中心。

例如,如果小部件是一个矩形并且它处于拖动事件中,它如下图所示,我在中心单击并开始拖动的事件:

无论我"pick-up"小部件在哪里,红色圆圈是鼠标光标在哪里。

mousePressEvent 中,我做了类似的事情:

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() ) );
    }
}

我可以将光标设置在中心吗?例如,如果小部件是从中心开始的,我可以将光标设置在中心吗?

QDrag::setHotSpot是你的朋友。

更新:

Sets the position of the hot spot relative to the top-left corner of the pixmap used to the point specified by hotspot.

Note: on X11, the pixmap may not be able to keep up with the mouse movements if the hot spot causes the pixmap to be displayed directly under the cursor.

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