获取鼠标坐标Qt OpenGL

时间:2013-08-30 23:33:38

标签: c++ qt mouse mouseevent mousemove

我有一个openGL小部件,知道我可以得到鼠标的坐标,如下所示:

X = this->mapFromGlobal(QCursor::pos()).x();
Y = this->mapFromGlobal(QCursor::pos()).y();

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

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

1 个答案:

答案 0 :(得分:4)

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

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

要好得多