c++ - 使 OpenGL 代码适应 Qt(特别是 keyPressEvent)

标签 c++ qt opengl

我在 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 吗?类(class)?

如果您的 OpenGL 类基于 QGLWidget,您可以这样做:

class QtGLStuff: public QGLWidget
{
    Q_OBJECT

public:
                    QtGLStuff();

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

private:
    int     mModus;
};

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

关于c++ - 使 OpenGL 代码适应 Qt(特别是 keyPressEvent),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7013186/

相关文章:

c++ - 可以跨静态断言维护状态吗?

c++ - 在我的代码中,scoped_ptr 指向一个堆栈变量——这会延长堆栈变量的生命周期吗?

c++ - 有谁知道 QT (4.7) 头文件和库在 mac 上的位置(即路径)?

c++ - 如何在QGraphicsView 的左下角添加复选框?

c++ - QUrl toPercentEncoding() 小写十六进制

c++ - OpenGL:点在无穷远的三角形

C++11 lambda 函数不接受类方法

c++ - 如果字符串中有空格,String.size() 返回不正确的数字

c++ - OpenGL:在没有绘制顺序的情况下渲染具有大量纹理透明度的模型?

c++ - 如何在 "glutCreateMenu"上添加用户输入