Мое приложение работает на встроенной системе.Я перенес приложение с 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%).
Как решить эту проблему?