我有一個簡單的3D渲染框架內的小部件與update()
方法負責渲染每一幀。目前我使用的是QTimer
觸發更新每秒60次,這似乎是確定的工作:非空閒替代QTimer的定期調用功能
void RenderingWidget::init()
{
// ...
QTimer* timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(16);
}
這種解決方案的問題是,有可能是16個之間的空閒時間ms不管它們渲染的速度有多快。在本地Windows應用程序中,如果沒有其他事件需要處理,我可以實現自己的消息循環並持續渲染幀。 Qt中可以做類似的事情嗎?
這裏的東西我想過,也出現好的工作,但是我讀過,它可能是一個不好的做法(即使用QApplication::processEvents()
):
void RenderingWidget::run()
{
running = true;
while(running)
{
update();
QApplication::processEvents();
}
}
我想'的QApplication :: processEvents'你的情況確定。你也可以在widget的paintEvent函數中實現渲染,並使用repaint()立即調用它。您可以使用'QElapsedTimer'手動限制幀速率。 –