如何强制QGLWidget更新屏幕
How to force QGLWidget to update screen?
我正在用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
相关文章:
- 从C++本机插件更新Vector3数组
- QGraphicsPolygonItem在拖动时未更新QPolygonF坐标
- cmake更新缓存的变量
- UE4-如何在给定4个屏幕坐标的情况下缩放纹理或材质
- 更新到莫哈韦后出现cmath错误
- OpenMP:并行更新数组总是需要减少数组吗
- 如何在GTK程序运行时禁用屏幕保护程序/电源管理/屏幕消隐
- 使用 SFML 和 C++ 将 Pixel 打印到屏幕上
- 为什么我的变量没有更新,我的 LED 没有亮起?
- 指针没有更新它在void函数内部指向的值
- 如何在c++中获取要更新的值
- 当对象在屏幕空间中较小时,OpenGL 更新缓慢
- QT QML 中的 OpenGL,无法更新屏幕上的图像
- Q怪异行为(不要用负数更新屏幕)
- 循环更新 Linux 的终端屏幕
- SFML - 流体屏幕更新
- SDL_RenderPresent()不定期更新屏幕
- QPaintEvent -只更新屏幕的一个区域
- 如何强制QGLWidget更新屏幕
- OpenGL只更新屏幕为vSync fps