From 535f2dc805e13ac414cca317d406005919090394 Mon Sep 17 00:00:00 2001 From: YeShanShan Date: Thu, 7 Mar 2024 15:23:26 +0800 Subject: [PATCH] fix: wrong availableSizes for DIconProxyEngine We should call proxy's `availableSizes` function. `availableSizes` always return empty list for icons, it causes `QPainter::begin: Paint device returned engine == 0` when painting to QImage. --- src/util/private/diconproxyengine.cpp | 15 +++++++++++++++ src/util/private/diconproxyengine_p.h | 10 ++++++++++ 2 files changed, 25 insertions(+) diff --git a/src/util/private/diconproxyengine.cpp b/src/util/private/diconproxyengine.cpp index 3c9d217d..707983e2 100644 --- a/src/util/private/diconproxyengine.cpp +++ b/src/util/private/diconproxyengine.cpp @@ -176,6 +176,21 @@ const return m_iconEngine ? m_iconEngine->iconName() : QString(); } +QList DIconProxyEngine::availableSizes(QIcon::Mode mode, QIcon::State state) +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + const +#endif +{ + return m_iconEngine ? m_iconEngine->availableSizes(mode, state) : QIconEngine::availableSizes(mode, state); +} + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) +bool DIconProxyEngine::isNull() +{ + return m_iconEngine ? m_iconEngine->isNull() : QIconEngine::isNull(); +} +#endif + QString DIconProxyEngine::proxyKey() { ensureEngine(); diff --git a/src/util/private/diconproxyengine_p.h b/src/util/private/diconproxyengine_p.h index 9177ead8..c7aafdf5 100644 --- a/src/util/private/diconproxyengine_p.h +++ b/src/util/private/diconproxyengine_p.h @@ -32,6 +32,16 @@ class Q_DECL_HIDDEN DIconProxyEngine : public QIconEngine #else QString iconName() const override; #endif + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + QList availableSizes(QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) override; +#else + QList availableSizes(QIcon::Mode mode = QIcon::Normal, QIcon::State state = QIcon::Off) const override; +#endif + +#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) + bool isNull() override; +#endif inline QString themeName() const { return m_iconThemeName; } QString proxyKey();