我在屏幕上更新OpenGL模型时遇到问题。我使用计时器在每个计时器步骤更新旋转角度:
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(Spin()));
timer->start(500);
void GLWidget::Spin()
{
qDebug() << "Spin()";
rotationX += 5;
rotationY += 5;
rotationZ += 5;
updateGL();
}
我也尝试过update()而不是updateGL(),但它也不起作用。 奇怪的是,通过用鼠标旋转模型它确实有效:
void GLWidget::mouseMoveEvent(QMouseEvent *event)
{
GLfloat dx = GLfloat(event->x() - lastPos.x()) / width();
GLfloat dy = GLfloat(event->y() - lastPos.y()) / height();
if (event->buttons() & Qt::LeftButton) {
rotationX += 180 * dy;
rotationY += 180 * dx;
updateGL();
} else if (event->buttons() & Qt::RightButton) {
rotationX += 180 * dy;
rotationZ += 180 * dx;
updateGL();
}
lastPos = event->pos();
}
答案 0 :(得分:1)
在QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags flags)
中updateGL()
调用后尝试调用Spin()
,强制将绘制调用推送到绘制队列中。
我的强制方法是调用repaint()
,这会完全绕过事件队列并立即调用paintEvent()
。