获取鼠标坐标Qt OpenGL

Mik*_*ike 3 c++ mouse qt mouseevent mousemove

我有一个 openGL 小部件,并且知道我可以获取鼠标的坐标,如下所示:

X = this->mapFromGlobal(QCursor::pos()).x();
Y = this->mapFromGlobal(QCursor::pos()).y();
Run Code Online (Sandbox Code Playgroud)

让我们假设我的鼠标位于小部件上的 (X, Y) 位置。现在我想在小部件上按鼠标左键,然后将光标再次移动到小部件中的另一个位置(比如说(X',Y')),然后松开鼠标左键。

问:如何保留(X,Y)和(X',Y')?

Bor*_*ein 5

最简单的解决方案是将它们存储为成员,如下所示:

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);
}
Run Code Online (Sandbox Code Playgroud)

注意:使用event->pos()已经为您提供了小部件坐标中的鼠标位置,这比使用要好得多mapFromGlobal(QCursor::pos())