C++ 用OpenGL获取鼠标坐标

C++ 用OpenGL获取鼠标坐标,c++,qt,mouse,mouseevent,mousemove,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') 最简单的解决方案是将它们存储为成员,

我有一个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())

要好得多,谢谢您的回答。你能解释一下你为什么在最后做翻译吗?@Mike很高兴这很有帮助:-)翻译只是一个虚构的例子,展示了在你需要{x | y}atPress和{x | y}atRelease的情况下可能的用法。我之所以选择这个例子,是因为它是一个常见的用例,如果让人困惑,请忽略它;-)@迈克:我看到你建议的编辑被合理地拒绝了(政策是不编辑改变意思的东西,因为文章的作者可能不同意)。在这种情况下,我确实不同意:
event->pos()
始终提供光标相对于小部件左上角的位置(doc:
返回鼠标光标相对于接收事件的小部件的位置)。经过多年的使用,我从未见过这种方法失败,包括在
QGLWidget
中的广泛使用。我想看看一个反例,如果你知道的话。