【问题标题】:An issue when rendering a line depending on Mouse position根据鼠标位置渲染线条时出现问题
【发布时间】:2013-09-03 15:32:04
【问题描述】:

我有一个 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(...) 是我定义的完美运作的基金。

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

【问题讨论】:

  • 您多久更新一次 currentX 和 currentY?
  • @Paddyd 每当我的鼠标移到小部件上时。
  • @Paddyd "idled" - 你的意思是什么?
  • 只有第一次点击才会出现这种情况吗?
  • @Paddyd 每次点击后都会发生,但有时(随机)不会发生。例如,如果我开始非常快地单击,则该错误可能不会再单击 2 次,然后再次出现。

标签: c++ qt mouseevent mousemove mouseclick-event


【解决方案1】:

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

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

【讨论】:

  • widget->setCurrentX(mouseCurrentPosition.x());小部件->setCurrentY(mouseCurrentPosition.y());这是更新
  • 不,仍然无法捕捉到错误:(
  • 这也没有帮助。我做了一些测试以了解这些点是如何生成的。我注意到每隔 n 秒鼠标位置就会重新保存在小部件上。并且线条被渲染到重新保存的坐标。
猜你喜欢
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
相关资源
最近更新 更多