如何强制QGLWidget更新屏幕?

时间:2013-02-21 12:15:48

标签: c++ qt opengl

我正在使用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()被调用。但是,屏幕上的实际图片只是很少更新。即使我调整窗口大小,场景也不会更新。为什么这样,我怎么强迫它更新?

2 个答案:

答案 0 :(得分:12)

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

答案 1 :(得分:8)

在CGLWidget构造函数

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

timer -> start(VALUE);

玩'VALUE 10只是一个例子。

阿多诺