6

我正在用 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();

 }

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

4

2 回答 2

14

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

于 2013-02-21T12:21:54.677 回答
10

在 CGLWidget 构造函数中

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

timer -> start(VALUE);

玩 `VALUE 10 只是一个例子。

装饰

于 2013-02-21T13:51:41.953 回答