Spinner: Fix destructor

Delete the accociated overlay widget on destruction.

Secure calls to overlay with QPointer.

Change-Id: I25a76498c39f16b89ddcea8fef1ac934d3c8652b
Reviewed-by: Marcus Tillmanns <marcus.tillmanns@qt.io>
This commit is contained in:
Jarek Kobus
2024-10-18 15:21:09 +02:00
parent 0f90482970
commit 01a3d636db
2 changed files with 22 additions and 7 deletions

View File

@@ -238,11 +238,18 @@ Spinner::Spinner(SpinnerSize size, QWidget *parent)
: QObject(parent) : QObject(parent)
, m_widget(new SpinnerOverlay(size, parent)) {} , m_widget(new SpinnerOverlay(size, parent)) {}
Spinner::~Spinner()
{
if (m_widget)
delete m_widget;
}
/*! /*!
Sets the size of the spinner to the given \a size. Sets the size of the spinner to the given \a size.
*/ */
void Spinner::setSize(SpinnerSize size) void Spinner::setSize(SpinnerSize size)
{ {
if (m_widget)
m_widget->setSize(size); m_widget->setSize(size);
} }
@@ -251,6 +258,7 @@ void Spinner::setSize(SpinnerSize size)
*/ */
void Spinner::setColor(const QColor &color) void Spinner::setColor(const QColor &color)
{ {
if (m_widget)
m_widget->setColor(color); m_widget->setColor(color);
} }
@@ -260,6 +268,7 @@ void Spinner::setColor(const QColor &color)
*/ */
void Spinner::show() void Spinner::show()
{ {
if (m_widget)
m_widget->show(); m_widget->show();
} }
@@ -268,6 +277,7 @@ void Spinner::show()
*/ */
void Spinner::hide() void Spinner::hide()
{ {
if (m_widget)
m_widget->hide(); m_widget->hide();
} }
@@ -276,7 +286,7 @@ void Spinner::hide()
*/ */
bool Spinner::isVisible() const bool Spinner::isVisible() const
{ {
return m_widget->isVisible(); return m_widget ? m_widget->isVisible() : false;
} }
/*! /*!
@@ -285,6 +295,7 @@ bool Spinner::isVisible() const
*/ */
void Spinner::setVisible(bool visible) void Spinner::setVisible(bool visible)
{ {
if (m_widget)
m_widget->setVisible(visible); m_widget->setVisible(visible);
} }

View File

@@ -6,6 +6,7 @@
#include "spinner_global.h" #include "spinner_global.h"
#include <QPointer>
#include <QWidget> #include <QWidget>
namespace SpinnerSolution { namespace SpinnerSolution {
@@ -20,12 +21,15 @@ Q_ENUM_NS(SpinnerState)
// TODO: SpinnerOverlay and SpinnerWidget? // TODO: SpinnerOverlay and SpinnerWidget?
class SpinnerOverlay;
class SPINNER_EXPORT Spinner : public QObject class SPINNER_EXPORT Spinner : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
explicit Spinner(SpinnerSize size, QWidget *parent = nullptr); explicit Spinner(SpinnerSize size, QWidget *parent = nullptr);
~Spinner() override;
void setSize(SpinnerSize size); void setSize(SpinnerSize size);
void setColor(const QColor &color); void setColor(const QColor &color);
void show(); void show();
@@ -34,7 +38,7 @@ public:
void setVisible(bool visible); void setVisible(bool visible);
private: private:
class SpinnerOverlay *m_widget = nullptr; QPointer<SpinnerOverlay> m_widget;
}; };
class SPINNER_EXPORT SpinnerWidget : public QWidget class SPINNER_EXPORT SpinnerWidget : public QWidget