Проблема при рендеринге линии в зависимости от положения мыши

У меня есть виджет openGL, где я хочу визуализировать строку, которая зависит от позиции мыши, следующим образом:

        glPushMatrix();
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glColor4f(1, 0, 0, 0.1);
glScalef(a, b, 0);
glBegin(GL_LINES);
glVertex2f(pushedX, pushedY);
glVertex2f(currentX, currentY);
glEnd();
glFlush();
glDisable(GL_BLEND);
glPopMatrix();

где:

pushedX=buttonPressCoordinates.x();
pushedY=buttonPressCoordinates.y();
currentX=mouseCurrentPosition.x();
currentY=mouseCurrentPosition.y();

Рендеринг проходит хорошо, и линия отображается так, как требуется, когда я перемещаю мышь, соединяясь с линией толкаемых и текущих координат.

НО:

проблема в том, что даже когда я нажимаю мышью где-то на виджете и не перемещаю его, он генерирует случайно (как мне кажется) некоторые (x, y) и соединяет их с линией с координатами нажатой позиции мыши , Хотя, когда я начинаю двигать мышью, она начинает работать нормально.

Пожалуйста, помогите исправить эту ошибку.

РЕДАКТИРОВАТЬ

Код присвоения текущих значений мыши

void MainWindow::mouseMoveEvent(QMouseEvent *eventMove)
{
if(eventMove->buttons() & Qt::LeftButton)
{
GLWidget *widget = this->findChild<GLWidget *>("glwidget");
float x = widget->getNormalizedWidth(widget->mapFromGlobal(QCursor::pos()).x());
float y = widget->getNormalizedHeight(widget->mapFromGlobal(QCursor::pos()).y());
float y_ = 1.0 - y;
mouseCurrentPosition.setX(x);
mouseCurrentPosition.setY(y_);
widget->setCurrentX(mouseCurrentPosition.x());
widget->setCurrentY(mouseCurrentPosition.y());
}
}

нота: QPointF mouseCurrentPosition;, getNormalizedWidth(...) мой определенный фонд, который работает идеально.

РЕДАКТИРОВАТЬ-2

Координаты щелчка мыши обновляются следующим образом:

setMouseTracking(true);
m = true;
GLWidget *widget = this->findChild<GLWidget *>("glwidget");
float x = widget->getNormalizedWidth(widget->mapFromGlobal(QCursor::pos()).x());
float y = widget->getNormalizedHeight(widget->mapFromGlobal(QCursor::pos()).y());
float y_ = 1.0 - y;
buttonPressCoordinates.setX(x);
buttonPressCoordinates.setY(y_);
qDebug() << buttonPressCoordinates.x() << buttonPressCoordinates.y();
widget->setQ(true);
widget->setPushedX(buttonPressCoordinates.x());
widget->setPushedY(buttonPressCoordinates.y());

0

Решение

Одна вещь, которую вы можете попробовать, это обновить currentX а также currentY в mouseMoveEvent когда LeftButton не нажимается:

void MainWindow::mouseMoveEvent(QMouseEvent *eventMove)
{

GLWidget *widget = this->findChild<GLWidget *>("glwidget");
float x = widget->getNormalizedWidth(widget->mapFromGlobal(QCursor::pos()).x());
float y = widget->getNormalizedHeight(widget->mapFromGlobal(QCursor::pos()).y());
float y_ = 1.0 - y;

if(eventMove->buttons() & Qt::LeftButton)
{
buttonPressCoordinates.setX(x);
buttonPressCoordinates.setY(y_);
widget->setPushedX(buttonPressCoordinates.x());
widget->setPushedY(buttonPressCoordinates.y());
}
else
{
mouseCurrentPosition.setX(x);
mouseCurrentPosition.setY(y_);
widget->setCurrentX(mouseCurrentPosition.x());
widget->setCurrentY(mouseCurrentPosition.y());
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]