qml
Fastighetsbindande
Sök…
Anmärkningar
Ett objekts egenskap kan tilldelas ett statiskt värde som förblir konstant tills det uttryckligen tilldelas ett nytt värde. Men för att utnyttja QML till fullo och dess inbyggda stöd för dynamiska objektbeteenden använder de flesta QML-objekt fastighetsbindningar.
Fastighetsbindningar är en kärnfunktion i QML som låter utvecklare specificera förhållanden mellan olika objektegenskaper. När en fastighets beroende ändras i värde uppdateras egenskapen automatiskt enligt det angivna förhållandet.
Grunder om fastighetsbindningar
Tänk på detta enkla exempel:
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"
}
}
I exemplet ovan är Rectangle bredd bunden till dess överordnade. Om du ändrar bredden på det körande applikationsfönstret ändras också rektangelns bredd.
Ett mer komplicerat exempel
I det enkla exemplet ställer vi helt enkelt in rektangelns bredd till dess överordnade. Låt oss överväga ett mer komplicerat exempel:
ApplicationWindow {
visible: true
width: 400
height: 640
Rectangle{
id: rect
anchors.centerIn: parent
height: 100
width: parent.width/2 + parent.width/3
color: "blue"
}
}
I exemplet utför vi aritmetisk operation på det värde som binds. Om du ändrar storleken på det körande applikationsfönstret till maximal bredd, blir gapet mellan rektangeln och applikationsfönstret bredare och vice versa.
Skapa bindningar med dynamiskt skapade QML-filer
När du använder instanser av QML-filer genom att direkt deklarera dem, skapar varje property en bindning. Detta förklaras i ovanstående exempel.
Så här skapar du dynamiskt komponenter:
var component = Qt.createComponent("Popup.qml");
var popup = component.createObject(parent, {"width": mainWindow.width, "height": mainWindow.height});
När storleken på mainWindow ändras mainWindow storleken på den skapade PopUp . För att skapa en bindning ställer du in storleken på popup så här:
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 kommer storleken på PopUp att bero på mainWindow .