C++ 根据鼠标位置渲染线时出现的问题

C++ 根据鼠标位置渲染线时出现的问题,c++,qt,mouseevent,mousemove,mouseclick-event,C++,Qt,Mouseevent,Mousemove,Mouseclick Event,我有一个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); glVer

我有一个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();
渲染进行得很好,当我移动鼠标连接推送的线和当前坐标时,该线将根据需要进行渲染

但是:

pushedX=buttonPressCoordinates.x();
pushedY=buttonPressCoordinates.y();
currentX=mouseCurrentPosition.x();
currentY=mouseCurrentPosition.y();
问题是,即使我在小部件上的某个地方按下鼠标,不移动它,它也会随机(正如我所想)生成一些(x,y),并用鼠标按下位置的坐标线连接它。虽然当我开始移动鼠标时,它开始工作良好

请帮助修复此错误

编辑

分配鼠标当前值的代码


您可以尝试的一件事是在未按下
LeftButton
时,在
mouseMoveEvent
中更新
currentX
currentY

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());
    }
}
void主窗口::mouseMoveEvent(QMouseEvent*eventMove)
{
GLWidget*widget=this->findChild(“GLWidget”);
float x=widget->getNormalizedWidth(widget->mapFromGlobal(QCursor::pos()).x());
float y=widget->getNormalizedHeight(widget->mapFromGlobal(QCursor::pos()).y();
浮动y=1.0-y;
if(eventMove->buttons()&Qt::LeftButton)
{      
按钮压力坐标.setX(x);
按钮压力坐标.setY(y_389;);
widget->setPushedX(buttonPressCoordinates.x());
widget->setPushedY(buttonPressCoordinates.y());
}
其他的
{
mouseCurrentPosition.setX(x);
mouseCurrentPosition.setY(y_);
widget->setCurrentX(mouseCurrentPosition.x());
widget->setCurrentY(mouseCurrentPosition.y());
}
}

你多久更新一次currentX和currentY?@Paddyd每当我的鼠标移动到小部件上时,@Paddyd“空闲”-你的意思是什么?这只发生在第一次单击时吗?@Paddyd每次单击后都会发生,但有时(随机时间)不会发生。例如,如果我开始快速单击,那么该错误可能在接下来的两次单击中都不会出现,然后再次出现。widget->setCurrentX(mouseCurrentPosition.x());widget->setCurrentY(mouseCurrentPosition.y());这是updateNop,仍然无法捕获错误:(这也没有帮助。我做了一些测试,以了解点是如何生成的。我注意到,每n秒鼠标位置都会重新保存在小部件上。并且线条会渲染到重新保存的坐标。
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());
    }
}