Почему рисование фонового изображения во встроенном приложении вызывает снижение производительности после перехода на Qt 5.9.3? - PullRequest
0 голосов
/ 25 августа 2018

Мое приложение работает на встроенной системе.Я перенес приложение с Qt 5.6 на Qt 5.9.3, и оно стало очень медленным.Я проверил вывод команды top и понял, что мое приложение вызывает загрузку процессора на 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"));
}

Этот результат немного быстрее, но все еще не удовлетворителен (загрузка процессора составляет 50%).

Как решить эту проблему?

...