c++ - 为什么在迁移到 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%)。
如何解决这个问题呢?
解决方案
推荐阅读
- .net - NewtonSoft Json 反序列化属性列表作为对象数组
- javascript - 使用 AudioBuffer 作为 HTMLAudioElement 的来源?
- r - 如何在不保留原始格式的情况下将文本从 pdf 文件复制到文本文件
- python - Neomodel 密码查询缺少位置参数
- java - 在Java中标记每行中数字最大的单元格
- pdf - 如何将 PDF 文件解码为可读格式?
- php - 无法连接到 Google Cloud 上的 SQL 实例数据库
- jquery - 尝试使用 HTML 创建下拉菜单
- google-cloud-platform - 寻找有关云作曲家稳定版本的信息?
- css - CSS动画:拉伸和压缩弧