C++ 为什么在嵌入式应用程序中绘制背景图像会在迁移到Qt 5.9.3后导致性能下降?
我的应用程序正在嵌入式系统上运行。我已经将应用程序从Qt5.6迁移到Qt5.9.3,速度变得非常慢。我检查了C++ 为什么在嵌入式应用程序中绘制背景图像会在迁移到Qt 5.9.3后导致性能下降?,c++,linux,qt,embedded,qpixmap,C++,Linux,Qt,Embedded,Qpixmap,我的应用程序正在嵌入式系统上运行。我已经将应用程序从Qt5.6迁移到Qt5.9.3,速度变得非常慢。我检查了top命令的输出,发现我的应用程序导致CPU利用率达到100% 因此,我检查了我的应用程序,发现代码的这一部分存在问题: MainWidget::MainWidget(QWidget *parent) : QWidget(parent) { ... QPixmap bg(BACK_IMG_PATH); bg.fill(Qt::transparent); Q
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%)
如何解决这个问题?一个加速的方法是,不要每次绘制图像时都从文件中加载图像,而是将其加载到构造函数中并存储在成员变量中。如果这是一个性能回归,您可能应该查看QT的变更日志,检查其邮件列表,等等。理想情况下,看看您是否可以开发一段最小的代码,以显示版本之间的巨大性能差异-如果您有,并且问题是原始的,那么您就有了向开发人员提供有用报告的基础。但是您需要有最少的代码来演示他们可以尝试的差异,并且您需要彻底检查以确保这不是一个已知问题,也不是在使用这两个版本时需要做的事情上的差异。