我有一个 openGL 小部件,并且知道我可以获得鼠标的坐标,如下所示:
X = this->mapFromGlobal(QCursor::pos()).x();
Y = this->mapFromGlobal(QCursor::pos()).y();
让我们想象一下我的鼠标在小部件上的 (X, Y) 位置。现在我想在小部件上按下鼠标左键并将光标再次移动到小部件中的另一个位置(比如说(X',Y')),然后松开鼠标左键。
问:如何保持(X,Y)和(X',Y')?
我有一个 openGL 小部件,并且知道我可以获得鼠标的坐标,如下所示:
X = this->mapFromGlobal(QCursor::pos()).x();
Y = this->mapFromGlobal(QCursor::pos()).y();
让我们想象一下我的鼠标在小部件上的 (X, Y) 位置。现在我想在小部件上按下鼠标左键并将光标再次移动到小部件中的另一个位置(比如说(X',Y')),然后松开鼠标左键。
问:如何保持(X,Y)和(X',Y')?
最简单的解决方案是将它们存储为成员,如下所示:
class MyGLWidget: public QGLWidget
{
// ...
private:
int xAtPress, yAtPress;
};
void MyGLWidget::mousePressEvent(QMouseEvent * event)
{
xAtPress = event->x();
yAtPress = event->y();
}
void MyGLWidget::mouseReleaseEvent(QMouseEvent * event)
{
int xAtRelease = event->x();
int yAtRelease = event->y();
// example code
int dx = xAtRelease - xAtPress;
int dy = yAtRelease - yAtPress;
translateObject(dx,dy);
}
注意:使用event->pos()
已经为您提供了小部件坐标中的鼠标位置,它比使用要好得多mapFromGlobal(QCursor::pos())