So che ci sono molte domande sulla gestione della memoria qt ma non sono riuscito a trovare una risposta sul mio.Gestione della memoria Qt per oggetti Qt
Quindi per i widget qt, se si passa questo (che è il widget genitore) come parametro alla creazione dell'oggetto, il widget padre ne assume la proprietà e lo elimina quando il genitore muore. La stessa cosa accade quando si aggiunge un widget a un layout e si imposta tale layout sul widget.
Ma cosa succede se dichiaro un puntatore a un oggetto QColor, ad esempio? QColor non può essere aggiunto come figlio per un altro widget o non può essere aggiunto a un layout. La memoria verrà rilasciata quando il widget muore o devo cancellarlo manualmente nel distruttore?
Ecco un esempio ... cosa succede con m_pColor quando il Widget verrà distrutto? Sarà distrutto o ci sarà una perdita di memoria? Ci scusiamo per eventuali errori nel codice, non l'ho compilato, l'ho appena scritto qui come esempio.
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
class QHBoxLayout;
class QPushButton;
class QColor;
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = NULL);
public:
QHBoxLayout *m_pLayout;
QPushButton *m_pButton;
QColor *m_pColor;
};
#endif // WIDGET_H
#include "widget.h"
#include <QHBoxLayout>
#include <QPushButton>
#include <QColor>
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
m_pLayout = new QHBoxLayout;
m_pButton = new QPushButton(tr("Button"));
m_pLayout->addWidget(m_pButton);
m_pColor = new QColor(0, 0, 0, 255);
setLayout(m_pLayout);
}