0

我的 Qt 应用程序遇到了一些问题,这些问题非常缓慢且滞后。最初它是在我现在使用的另一台机器上开发的,它似乎在那里工作得很好。现在,我可以看到当我启动应用程序时 xorg 进程的 CPU 负载非常高(>25%),尽管它几乎没有做任何事情。

我正在使用两个 QGLWidgets 以 25fps 的帧速率绘制 2D 图形。我这样做的方法是重载paintEvent() 函数。我读过在某些情况下,此函数会产生无限循环,例如在函数内创建新对象时。我已经尝试将代码减少到最低限度,但问题仍然存在:

void GLMonitor::paintEvent(QPaintEvent *event)
{
    QPainter painter;
    painter.begin(this);
    painter.setRenderHint(QPainter::Antialiasing);
    //aerpainter->paint(&painter, event, elapsed);
    painter.end();
}

它没有画任何东西(因为我注释掉了 aerpainter->paint()),但 xorg 仍然处于 25% 的 CPU 负载并且 GUI 很慢。

定时器的超时信号(周期为 25Hz)连接到以下插槽,该插槽应触发paintEvent,就像在 Qt 示例之一中所做的那样:

void GLMonitor::animate()
{
    elapsed = (elapsed + qobject_cast<QTimer*>(sender())->interval()) % 1000;
    repaint();
}

以下是可能与问题有关的其他一些观察结果:

  • 有很多 kworker 和迁移进程也使用了相当多的 CPU(总结起来大约是 10%-30%)。

  • 我已经在原始机器上测试了该应用程序,它工作正常,但我注意到不是 xorg 而是 compiz 具有高 CPU 负载(大约 80%),即使它没有绘制任何东西......

更新:我刚刚意识到,当我增加 fps 时,其他 Qt 应用程序(如 2dpainting 演示)也会滞后,即使我注释掉了绘画代码(如上所示)。所以他们的整个问题可能与我的系统有关......?

4

0 回答 0