为什么移植到Qt 5.9.3后嵌入式应用程序中的背景图像绘制会导致性能下降?

时间:2018-08-25 06:58:00

标签: c++ linux qt embedded qpixmap

我的应用程序正在嵌入式系统上运行。我已将应用程序从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%)。

如何解决这个问题?

0 个答案:

没有答案