У меня есть виджет openGL и я знаю, что могу получить координаты моей мыши следующим образом:
X = this->mapFromGlobal(QCursor::pos()).x();
Y = this->mapFromGlobal(QCursor::pos()).y();
Давайте представим, что моя мышь находится в положении (X, Y) на виджете. Теперь я хочу нажать левую кнопку мыши на виджете и снова переместить курсор в другое место в виджете (скажем, (X ‘, Y’)), а затем отжать левую кнопку мыши.
Q: Как сохранить (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())
Других решений пока нет …