QML: Получить родительский объект QObject
QML вводит отдельную собственность (QObject
) дерево из визуального дерева (граф сцены QtQuick).
parent
возвращает визуального родителя.children
возвращает визуальных детей.data
возвращаетQObject
дети.
Но как мне получить доступ к QObject
родитель?
К вашему сведению, я намереваюсь динамически создавать и уничтожать вложенные макеты, содержащие пользовательский тип, поэтому мне нужно управлять QObject
дерево - простое использование визуального дерева приведет к тому, что "неправильные" объекты исчезнут после переопределения и последующего удаления.
2 ответа
Если вы на самом деле не знаете родителя элемента, я не думаю, что вы сможете узнать, не вдаваясь в C++. Если вы просто хотите изменить элемент QObject
родитель, вы должны быть в состоянии сделать это в QML, добавив его в data
собственность его нового родителя. (Это также изменит его визуального родителя, если применимо.)
Цитирование документации по Qt Quick Concepts:
Любой объект, назначенный свойству данных элемента, становится дочерним для элемента в его иерархии QObject для целей управления памятью. Кроме того, если объект, добавленный к свойству данных, имеет тип Item, он также присваивается свойству Item::children и становится дочерним для элемента в иерархии визуальной сцены. (Большинство алгоритмов сканирования иерархии Qt Quick, особенно алгоритмы рендеринга, учитывают только визуальную родительскую иерархию.)
Вы можете избежать нежелательного владения объектами предыдущими родителями, создав их следующим образом:
const someObject = someComponent.createObject( null, { parent: someItem });
СюдаsomeItem
является только визуальным родителемsomeObject
. Вы можете переместить дочерний элемент в другое место, а затем удалить контейнер.