首页 > 解决方案 > 为什么在迁移到 Qt 5.9.3 后,在嵌入式应用程序中绘制背景图像会导致性能下降?

问题描述

我的应用程序正在嵌入式系统上运行。我已将应用程序从 Qt 5.6 迁移到 Qt 5.9.3,它变得非常慢。我检查了top命令的输出并意识到我的应用程序导致 CPU 利用率为 100%。

所以,我检查了我的应用程序,发现这部分代码存在问题:

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
...

    QPixmap bg(BACK_IMG_PATH);
    bg.fill(Qt::transparent);
    QPalette p(palette());
    p.setBrush(QPalette::Background, bg);
    setAutoFillBackground(true);
    setPalette(p);
...
}

问题是,如果我为背景添加代码,我的应用程序会变得非常慢。但是,如果我删除此代码,我的应用程序将按预期工作。但这不能成为解决方案,因为我需要背景。

这个问题在迁移之前不存在。

我试图通过像这样重新实现paintEvent和使用QPainter来解决这个问题:

void MainWidget::paintEvent(QPaintEvent *event)
{
    QPainter painter(this);
    painter.drawImage(QRectF(this->x(), this->y(), this->width(), this->height()), QImage("img/bg_1280_720.png"));
}

这个结果稍微快了一点,但还是不能令人满意(cpu利用率为50%)。

如何解决这个问题呢?

标签: c++linuxqtembeddedqpixmap

解决方案


推荐阅读