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)
, 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.
*/
void Spinner::setSize(SpinnerSize size)
{
if (m_widget)
m_widget->setSize(size);
}
@@ -251,6 +258,7 @@ void Spinner::setSize(SpinnerSize size)
*/
void Spinner::setColor(const QColor &color)
{
if (m_widget)
m_widget->setColor(color);
}
@@ -260,6 +268,7 @@ void Spinner::setColor(const QColor &color)
*/
void Spinner::show()
{
if (m_widget)
m_widget->show();
}
@@ -268,6 +277,7 @@ void Spinner::show()
*/
void Spinner::hide()
{
if (m_widget)
m_widget->hide();
}
@@ -276,7 +286,7 @@ void Spinner::hide()
*/
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)
{
if (m_widget)
m_widget->setVisible(visible);
}

View File

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