带有QTimer的updateGL()
我在更新屏幕上的OpenGL模型时遇到问题。我使用计时器在每个计时器步骤更新旋转角度:带有QTimer的updateGL(),qt,opengl,Qt,Opengl,我在更新屏幕上的OpenGL模型时遇到问题。我使用计时器在每个计时器步骤更新旋转角度: QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(Spin())); timer->start(500); void GLWidget::Spin() { qDebug() << "Spin()"; rotationX += 5; rotationY +
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();
}
在
updateGL()
调用Spin()
之后,尝试调用QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags)
,以强制通过绘制队列推送绘制调用
我的强力方法是调用
repaint()
,这将完全绕过事件队列,并立即调用paintEvent()
。尝试在updateGL()调用Spin()后调用QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags标志)
,强制通过绘制队列推送绘制调用
我的暴力方法是调用repaint()
,这将完全绕过事件队列,并立即调用paintEvent()
。感谢您的快速回答。我尝试了您的建议并得到了:“错误C2275:'QEventLoop::ProcessEventsFlags':非法使用此类型作为表达式”,然后我尝试了QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags())
并且不再有错误消息,但它仍然不起作用。flags变量是什么,应该设置为什么值?flags arg是一种枚举类型(确切地说,它是Qt自己的标志容器),虽然它是默认初始化的-但是你那里的东西基本上做了相同的事情,因为QEventLoop::AllEvents
==0x00。Qt有非常好的文档,顺便说一句:。我已经根据答案编辑了另一个建议。感谢你的快速回答。我尝试了你的建议,得到了:“错误C2275:'QEventLoop::ProcessEventsFlags”:非法使用o如果将此类型作为表达式,则我尝试了QCoreApplication::processEvents(QEventLoop::ProcessEventsFlags()
,并且不再有错误消息,但它仍然不起作用。flags变量是什么,应该设置为什么值?flags arg是一种枚举类型(确切地说,它是Qt自己的标志容器),虽然它是默认初始化的-但是您在那里看到的基本上做了相同的事情,因为QEventLoop::AllEvents
==0x00。Qt有非常好的文档,顺便说一句:。我已经根据答案编辑了另一个建议。使用update()而不是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();
}