qml
Eigendom bindend
Zoeken…
Opmerkingen
Aan de eigenschap van een object kan een statische waarde worden toegewezen die constant blijft totdat expliciet een nieuwe waarde wordt toegewezen. Om echter optimaal gebruik te kunnen maken van QML en de ingebouwde ondersteuning voor dynamisch objectgedrag, gebruiken de meeste QML-objecten eigenschapsbindingen.
Eigenschapsbindingen zijn een kernkenmerk van QML waarmee ontwikkelaars relaties tussen verschillende objecteigenschappen kunnen specificeren. Wanneer de afhankelijkheden van een eigenschap in waarde veranderen, wordt de eigenschap automatisch bijgewerkt volgens de opgegeven relatie.
Basisprincipes van eigenschapsbindingen
Overweeg dit eenvoudige voorbeeld:
import QtQuick 2.7
import QtQuick.Controls 2.0
ApplicationWindow {
visible: true
width: 400
height: 640
Rectangle{
id: rect
anchors.centerIn: parent
height: 100
width: parent.width
color: "blue"
}
}
In het bovenstaande voorbeeld is de breedte van Rectangle gebonden aan die van zijn bovenliggende. Als u de breedte van het actieve toepassingsvenster wijzigt, verandert ook de breedte van de rechthoek.
Een ingewikkelder voorbeeld
In het eenvoudige voorbeeld stellen we eenvoudig de breedte van de rechthoek in op die van de ouder. Laten we een ingewikkelder voorbeeld bekijken:
ApplicationWindow {
visible: true
width: 400
height: 640
Rectangle{
id: rect
anchors.centerIn: parent
height: 100
width: parent.width/2 + parent.width/3
color: "blue"
}
}
In het voorbeeld voeren we rekenkundige bewerkingen uit op de waarde die wordt gebonden. Als u de grootte van het actieve applicatievenster wijzigt in de maximale breedte, wordt de ruimte tussen de rechthoek en het applicatievenster groter en omgekeerd.
Maak bindingen met dynamisch aangemaakte QML-bestanden
Bij het gebruik van instanties van QML-bestanden door ze direct aan te geven, creëert elke property een binding. Dit wordt uitgelegd in de bovenstaande voorbeelden.
Dit is hoe je dynamisch componenten maakt:
var component = Qt.createComponent("Popup.qml");
var popup = component.createObject(parent, {"width": mainWindow.width, "height": mainWindow.height});
Wanneer de grootte van het mainWindow verandert, heeft dit geen invloed op de grootte van de gemaakte PopUp . Om een binding te maken, stelt u de grootte van de popup als volgt in:
var component = Qt.createComponent("Popup.qml");
var options = {
"width": Qt.binding(function() { return mainWindow.width }),
"height": Qt.binding(function() { return mainWindow.height }),
};
var popup = component.createObject(parent, options);
Nu is de grootte van de PopUp afhankelijk van mainWindow .