Если вы строите свою собственную иерархию с QObject
s, то есть вы инициализируете все вновь созданные QObject
s с родителем,
QObject* parent = new QObject();
QObject* child = new QObject(parent);
, тогда достаточно delete
the parent
, потому что деструктор parent
s позаботится об уничтожении child
.(Он делает это путем выдачи сигналов, поэтому он безопасен даже тогда, когда вы вручную удаляете child
перед родителем.)
Сначала вы также можете удалить дочерний элемент, порядок не имеет значения.Для примера, где порядок имеет значение , здесь документация о деревьях объектов .
Если ваш MyClass
не является потомком QObject
, выдолжны использовать простой способ выполнения C ++.
Также обратите внимание, что иерархия родитель-потомок QObject
s, как правило, не зависит от иерархии дерева иерархии классов C ++ / дерева наследования.Это означает, что назначенный ребенок не должен быть прямым подклассом своего родителя .Любой (подкласс) QObject
будет достаточным.
Однако конструкторы могут накладывать некоторые ограничения по другим причинам;например, в QWidget(QWidget* parent=0)
, где родительский элемент должен быть другим QWidget
, например, из-за флагов видимости и из-за того, что таким образом вы сделали бы некоторую базовую разметку;но для системы иерархии Qt в целом вам разрешено иметь любой QObject
в качестве родителя.