Qt如何知道paintEvent需要多长时间?

问题描述 投票:0回答:1

这是一种后续行动question。我有一个QOpenGLWidget,它会不断更新自身。

QTimer *Timer = new QTimer(this);
connect(Timer, SIGNAL(timeout()), this, SLOT(update()));
Timer->start();

与“正常” QWidget不同,QOpenGLWidget每16毫秒更新一次(对应于60 Hz监视器)。我不使用特定的OpenGL函数,所以我只是覆盖paintEvent。Qt documentation

[仅使用QPainter执行绘制时,也可以像对普通小部件一样执行绘制:通过重新实现paintEvent()。

void Widget::paintEvent(QPaintEvent* event) {
    auto t1 = std::chrono::high_resolution_clock::now();
    QPainter Painter(this);
    auto t2 = std::chrono::high_resolution_clock::now();

    /* ...
    draw something 
    ...*/


    auto t3 = std::chrono::high_resolution_clock::now();
}

在我的代码中,paintEvent至少需要16毫秒(t3-t1)。我注意到初始化QPainter(t2-t1)的持续时间取决于其余时间(t3-t2)。我想知道qt怎么知道剩下的时间要花多长时间?在我的情况下,绘图需要1-2毫秒。我希望这样的更新工作:

最后一帧->等待->过程图->新帧。

而不是:

最后一帧->工艺图->等待->新帧。

这是有效的陈述吗?

c++ qt opengl frame-rate qopenglwidget
1个回答
0
投票

您的QTimer的间隔设置为0(默认设置),因此it will time out as soon as all the events in the window system's event queue have been processed并触发下一次更新。

与监视器的刷新率无关。

© www.soinside.com 2019 - 2024. All rights reserved.