如何强制QGLWidget更新屏幕

How to force QGLWidget to update screen?

本文关键字:屏幕 更新 QGLWidget 何强制      更新时间:2023-10-16

我正在用Open GL绘制一个简单的场景。我已经将QGLWidget子类化并覆盖了paintGL()。没有什么特别之处:

void CGLWidget::paintGL()
 {
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    gluLookAt (120.0, 160.0, -300.0, 0.0 + 120.0, 0.0 + 160.0, 2.0 - 300.0, 0.0, 1.0, 0.0);
    glScalef(1.0f/300.0f, 1.0f/300.0f, 1.0f/300.0f);
    glClear(GL_DEPTH_BUFFER_BIT);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(80.0, width()/(double)height(), 5.0, 100000.0);
    glMatrixMode(GL_MODELVIEW);
    glBegin(GL_POINTS);
    glColor3f(1.0f,0.6f,0.0f);
    glVertex3d(x, y, z);
    // ...drawing some more points...
    glEnd();
 }

我在主窗口中有一个计时器,它触发GL小部件的updateGL()。我已经验证了它会导致调用paintGL()。然而,屏幕上的实际图片很少更新。即使调整窗口大小,场景也不会更新。为什么会这样?我如何强制更新?

不要从计时器中调用updateGL(),而是调用update()以确保视图获得绘制事件。

在CGLWidget构造函数中

QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(10);
timer -> start(VALUE);

玩"VALUE 10"只是一个例子。

Adorn