QWidget и QLayout являются QObject, и у QObjects может быть отношение родства, как документы указывают:
QObjects организуются в деревья объектов. Когда вы создаете QObject с другим объектом в качестве родителя, объект автоматически добавится в список дочерних элементов родителя (). Родитель получает право собственности на объект; т.е. он автоматически удалит своих потомков в своем деструкторе. Вы можете искать объект по имени и, при необходимости, вводить текст с помощью findChild () или findChildren ().
И, как указывалось, основная функция заключается в освобождении памяти детей при уничтожении родителя. что в C ++ важно избегать утечек памяти, и то же самое передается в Python bindings.
Таким образом, макет является сыном виджета, поэтому, когда виджет уничтожается, макет также уничтожается.
Если вы хотите получить виджет детей, вы должны использовать метод QObject::findChildren()
:
c ++
QList<QWidget *> childrens = widget.findChildren<QWidget *>(Qt::FindDirectChildrenOnly);
python
childrens = widget.findChildren(QtWidgets.QWidget, QtCore.Qt.FindDirectChildrenOnly)
Примечание: Если вы хотите получить рекурсивный доступ к детям, то вы должны изменить Qt::FindDirectChildrenOnly
на Qt::FindChildrenRecursively
.