QML SplitView: Как этот элемент управления обрабатывает свои дочерние элементы во внутренний элемент? - PullRequest
0 голосов
/ 13 октября 2018

Я заглянул в исходный код SplitView (% QT_SOURCE_PATH% \ qml \ QtQuick \ Controls \ SplitView.qml) и заметил, что он использовал 3 элемента для отображения сплиттеров и элементов:

Item {
    id: contents
    visible: false
    anchors.fill: parent
}
Item {
    id: splitterItems
    anchors.fill: parent
}
Item {
    id: splitterHandles
    anchors.fill: parent
}

Согласно кодуновые элементы помещаются в элемент splitterItems с помощью функции addItem_impl (item) .Функция addItem_impl (item) вызывается из функции init () , которая передает каждый дочерний элемент из Item с идентификатором содержимым .Но мне интересно, как все дети из элемента root были помещены в содержимое элемент?

1 Ответ

0 голосов
/ 13 октября 2018

Через свойство по умолчанию :

default property alias __contents: contents.data

Из документации :

Определение объекта может иметь один параметр по умолчаниюимущество.Свойство по умолчанию - это свойство, которому назначается значение, если объект объявлен в определении другого объекта без объявления его как значения для определенного свойства.

[...]

Вызаметит, что дочерние объекты могут быть добавлены к любому основанному на Item типу без явного добавления их в свойство children.Это связано с тем, что по умолчанию свойство Item является его свойством данных, и любые элементы, добавленные в этот список для элемента, автоматически добавляются в его список дочерних элементов.

Свойства по умолчанию могут быть полезны для переназначения дочерних элементов элемента.,См. Пример TabWidget, который использует свойство по умолчанию для автоматической переназначения дочерних элементов TabWidget в качестве дочерних элементов внутреннего ListView.Смотрите также Расширение QML.

...