QML-Komponenten-Rätsel

Nimm diesen Code:

import QtQuick 1.1

Rectangle {
    width:  100
    height: 100

    property color fromColor: "red"
    property color toColor:   "blue"

    gradient: Gradient {
        property color fromColor: "yellow"
        property color toColor:   "green"

        GradientStop { position: 0; color: fromColor }
        GradientStop { position: 1; color: toColor }
    }
}

Warum genau funktioniert das?Gradient Wählen Sie seinefromColor undtoColor Eigenschaften aus dem einschließenden Element?

Wo ist dies dokumentiert (zumindest in Quellcode-Kommentaren, besser in den offiziellen Dokumenten)?

Hinweis: Dieses Beispiel für "QML-Verschleierung" stammt aus dem Vortrag von Girish RamakrishnanQt Quick Best Practices und Entwurfsmuster (Rücklauf zur 25. Minute), wo er sagt, dass das Ding extrem kompliziert ist und mit Komponentenumfang und dergleichen zu tun hat, aber keine Zeit hat, zu erklären, warum.

[AKTUALISIEREN]

Wie MartinJ weiter unten ausführt, sind die Eigenschaften der Komponente auf oberster Ebene in der Hierarchie der Elementeigenschaften (nicht nur der untergeordneten Elemente) für alle Eigenschaften sichtbar, unabhängig davon, wie tief sie verschachtelt sind. Vorrang haben die Eigenschaften dieser Eigenschaften und alle Eigenschaften von "Intermediate" -Artikel überhaupt nicht gesehen.

Hier ist ein kleines Beispiel:

import QtQuick 1.1

Item {
    Item {
        property string s: "parent-str"
        Item { Component.onCompleted: console.log(s) }
    }
}

Das gibt:"ReferenceError: Can't find variable: s"

Und das funktioniert wie erwartet:

import QtQuick 1.1

Item {
    property string s: "parent-str"
    Item { Component.onCompleted: console.log(s) }
}

, ausgeben"parent-str".

Bitte beachten Sie MartinJs Kommentare unten.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage