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. Вы можете переместить дочерний элемент в другое место, а затем удалить контейнер.

Другие вопросы по тегам