Fix crash in some unit tests from constructing a QPixmap without a QApplication

This commit is contained in:
Gaute Lindkvist 2019-05-06 13:32:22 +02:00
parent 07903a6324
commit af1a5790a2
2 changed files with 21 additions and 10 deletions

View File

@ -29,7 +29,7 @@ QIconProvider::QIconProvider(const QString& iconResourceString)
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
QIconProvider::QIconProvider(const QPixmap& pixmap) QIconProvider::QIconProvider(const QPixmap& pixmap)
: m_iconPixmap(pixmap) : m_iconPixmap(new QPixmap(pixmap))
{ {
} }
@ -64,7 +64,7 @@ QIcon QIconProvider::icon() const
m_icon = generateIcon(); m_icon = generateIcon();
} }
if (!m_active) if (!m_active && isGuiApplication())
{ {
QPixmap disabledPixmap = m_icon.pixmap(16, 16, QIcon::Disabled); QPixmap disabledPixmap = m_icon.pixmap(16, 16, QIcon::Disabled);
return QIcon(disabledPixmap); return QIcon(disabledPixmap);
@ -80,7 +80,7 @@ bool QIconProvider::isNull() const
{ {
if (!isGuiApplication()) return true; if (!isGuiApplication()) return true;
if (m_iconPixmap.isNull() && m_iconResourceString.isEmpty()) return true; if (!hasValidPixmap() && m_iconResourceString.isEmpty()) return true;
return icon().isNull(); return icon().isNull();
} }
@ -107,7 +107,7 @@ void QIconProvider::setIconResourceString(const QString& iconResourceString)
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void QIconProvider::setPixmap(const QPixmap& pixmap) void QIconProvider::setPixmap(const QPixmap& pixmap)
{ {
m_iconPixmap = pixmap; m_iconPixmap.reset(new QPixmap(pixmap));
m_icon = QIcon(); m_icon = QIcon();
} }
@ -119,9 +119,9 @@ QIcon QIconProvider::generateIcon() const
{ {
if (isGuiApplication()) if (isGuiApplication())
{ {
if (!m_iconPixmap.isNull()) if (hasValidPixmap())
{ {
return QIcon(m_iconPixmap); return QIcon(*m_iconPixmap);
} }
return QIcon(m_iconResourceString); return QIcon(m_iconResourceString);
} }
@ -135,3 +135,11 @@ bool QIconProvider::isGuiApplication()
{ {
return dynamic_cast<QApplication*>(QCoreApplication::instance()) != nullptr; return dynamic_cast<QApplication*>(QCoreApplication::instance()) != nullptr;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool QIconProvider::hasValidPixmap() const
{
return m_iconPixmap && !m_iconPixmap->isNull();
}

View File

@ -39,6 +39,8 @@
#include <QPixmap> #include <QPixmap>
#include <QString> #include <QString>
#include <memory>
namespace caf namespace caf
{ {
//================================================================================================== //==================================================================================================
@ -61,13 +63,14 @@ public:
void setPixmap(const QPixmap& pixmap); void setPixmap(const QPixmap& pixmap);
protected: protected:
bool hasValidPixmap() const;
virtual QIcon generateIcon() const; virtual QIcon generateIcon() const;
static bool isGuiApplication(); static bool isGuiApplication();
protected: protected:
QString m_iconResourceString; QString m_iconResourceString;
QPixmap m_iconPixmap; std::unique_ptr<QPixmap> m_iconPixmap;
mutable QIcon m_icon; mutable QIcon m_icon;
bool m_active; bool m_active;
}; };
} }