如何在QT opengl中将帧速率限制为60fps

如何在QT opengl中将帧速率限制为60fps,opengl,qtopengl,Opengl,Qtopengl,我曾经使用函数在GLFW中限制渲染帧率 glfwSwapInterval(1); 现在,我正在使用QT Opengl特性在QT中构建一个Opengl项目 在main函数中,我设置了全局值 QGLFormat format; format.setDepthBufferSize(24); format.setStencilBufferSize(8); format.setSampleBuffers(true); format.setSamples(4);

我曾经使用函数在GLFW中限制渲染帧率

glfwSwapInterval(1);
现在,我正在使用QT Opengl特性在QT中构建一个Opengl项目

在main函数中,我设置了全局值

QGLFormat  format;
    format.setDepthBufferSize(24);
    format.setStencilBufferSize(8);
    format.setSampleBuffers(true);
    format.setSamples(4);
    format.setSwapInterval(1);
    QGLFormat::setDefaultFormat(format);
这就是Qt opengl类标题的外观

   class GLWidget : public  QGLWidget
{
    Q_OBJECT;
public:
    explicit GLWidget(QWidget *parent = 0);
    void initializeGL() override;
    void paintGL() override;
    void resizeGL(int w, int h) override;
    QTimer timer;

};
在类的构造函数中

 GLWidget::GLWidget(QWidget *parent) :QGLWidget(parent)
{
    connect(&timer, &QTimer::timeout, this, [&]() {  
        QElapsedTimer elapsedtimer;
        elapsedtimer.start();
        updateGL();
        qDebug() << elapsedtimer.elapsed();
    });
    timer.setInterval(0);
    timer.start();
}
GLWidget::GLWidget(QWidget*parent):QGLWidget(parent)
{
连接(&timer,&QTimer::timeout,this,[&](){
qelasedtimer elasedtimer;
elapsedtimer.start();
updateGL();

qDebug()注意,但是,注意,假设你正在使用QT5,你应该考虑使用它。@ G.谢谢你的回复,我已经根据你的输入更新了这个问题,但是渲染循环不是同步的。我所显示的代码——<代码> Pruttgl < /C> >以60Hz的速率被调用。你确定你不会混淆它的速率吗?调用的是
updateGL
,而不是
paintGL
?它们不是一回事。@G.M调试输出与“qDebug()不同作为一个起点,在你的<代码> PruttGL实现中放一个<代码> qDebug ./Cord>语句,输出当前帧号和时间戳。但是,注意,假设你正在使用QT5,你应该考虑使用它。@ G.谢谢你的回复,我已经根据你的输入更新了问题,但是仍然渲染了一个循环I。未同步。显示的代码对我有效--
paintGL
以60Hz的速率调用。你确定没有混淆调用
updateGL
的速率而不是
paintGL
?它们不是同一回事。@G.M调试输出与“qDebug()首先,在
paintGL
实现中放入一条
qDebug
语句,输出当前帧编号和时间戳。