0

次のように、マウスの位置に依存する線をレンダリングしたい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());
4

1 に答える 1

0

あなたが試すことができる1つのことは、更新することで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());
    }
}
于 2013-09-03T16:02:56.117 に答える