我在OpenGL中有一个工作程序,现在可以在Qt下工作。有些事情有些不同,我现在正在努力使用keypressevent-function。我有一个全局变量,应通过按一个键(以后按一个按钮)进行更改。

int modus = -1;

void GLWidget::keyPressEvent(QKeyEvent* event)
{
    switch (event->key())
    {
    case Qt::Key_F2 :
        modus = 1;
        updateGL();
        break;
    default:
        break;
    }
}

此更改的变量应在mousePressEvent()中使用
void GLWidget::mousePressEvent(QMouseEvent* e)
{
    if (modus == 1 && (e->buttons() & Qt::LeftButton))
    {
        counter++;
        p_list[counter].x = mx - width1/2;
        p_list[counter].y = my - height1/2;
        glPointSize(5);
        glColor3d(1, 0, 0);
        updateGL();
    }
}

最佳答案

您不使用Qt的QGLWidget类吗?

如果您的OpenGL类基于QGLWidget,则可以执行以下操作:

class QtGLStuff: public QGLWidget
{
    Q_OBJECT

public:
                    QtGLStuff();

    virtual void    keyPressEvent( QKeyEvent* );
    virtual void    mousePressEvent( QMouseEvent* );

private:
    int     mModus;
};

然后,方式(我将其重命名为mModus来指定它是一个成员数据)只是变成了您的类的方法共享的数据,而不是全局变量。

10-05 23:01