diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafQIconProvider.cpp b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafQIconProvider.cpp index bdc4f1c02c..bbfdbe7430 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafQIconProvider.cpp +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafQIconProvider.cpp @@ -29,7 +29,7 @@ QIconProvider::QIconProvider(const QString& iconResourceString) /// //-------------------------------------------------------------------------------------------------- QIconProvider::QIconProvider(const QPixmap& pixmap) - : m_iconPixmap(pixmap) + : m_iconPixmap(new QPixmap(pixmap)) { } @@ -64,7 +64,7 @@ QIcon QIconProvider::icon() const m_icon = generateIcon(); } - if (!m_active) + if (!m_active && isGuiApplication()) { QPixmap disabledPixmap = m_icon.pixmap(16, 16, QIcon::Disabled); return QIcon(disabledPixmap); @@ -80,7 +80,7 @@ bool QIconProvider::isNull() const { if (!isGuiApplication()) return true; - if (m_iconPixmap.isNull() && m_iconResourceString.isEmpty()) return true; + if (!hasValidPixmap() && m_iconResourceString.isEmpty()) return true; return icon().isNull(); } @@ -107,7 +107,7 @@ void QIconProvider::setIconResourceString(const QString& iconResourceString) //-------------------------------------------------------------------------------------------------- void QIconProvider::setPixmap(const QPixmap& pixmap) { - m_iconPixmap = pixmap; + m_iconPixmap.reset(new QPixmap(pixmap)); m_icon = QIcon(); } @@ -119,9 +119,9 @@ QIcon QIconProvider::generateIcon() const { if (isGuiApplication()) { - if (!m_iconPixmap.isNull()) + if (hasValidPixmap()) { - return QIcon(m_iconPixmap); + return QIcon(*m_iconPixmap); } return QIcon(m_iconResourceString); } @@ -135,3 +135,11 @@ bool QIconProvider::isGuiApplication() { return dynamic_cast(QCoreApplication::instance()) != nullptr; } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool QIconProvider::hasValidPixmap() const +{ + return m_iconPixmap && !m_iconPixmap->isNull(); +} diff --git a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafQIconProvider.h b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafQIconProvider.h index c3ce820996..6b822fb0aa 100644 --- a/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafQIconProvider.h +++ b/Fwk/AppFwk/cafProjectDataModel/cafPdmUiCore/cafQIconProvider.h @@ -39,6 +39,8 @@ #include #include +#include + namespace caf { //================================================================================================== @@ -61,13 +63,14 @@ public: void setPixmap(const QPixmap& pixmap); protected: + bool hasValidPixmap() const; virtual QIcon generateIcon() const; static bool isGuiApplication(); protected: - QString m_iconResourceString; - QPixmap m_iconPixmap; - mutable QIcon m_icon; - bool m_active; + QString m_iconResourceString; + std::unique_ptr m_iconPixmap; + mutable QIcon m_icon; + bool m_active; }; }