QML Qt.binding
生活随笔
收集整理的這篇文章主要介紹了
QML Qt.binding
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Qt.bindding的執行由QML引擎監控,一旦滿足綁定條件就會響應。
第一種:為屬性綁定一段代碼
Rectangle{implicitWidth: 300;implicitHeight: 200;TextField {id: control1;implicitWidth: parent.width;implicitHeight: 60;anchors.top: parent.top;placeholderText: qsTr("Enter description");background: Rectangle {implicitWidth: 300;implicitHeight: 60;color: control1.enabled ? "transparent" : "#353637";border.color: control1.enabled ? "#21be2b" : "transparent";}}TextField {id: control2;implicitWidth: parent.width;implicitHeight: 60;anchors.top: control1.bottom;anchors.topMargin: 5;readOnly: true;background: Rectangle {implicitWidth: 300;implicitHeight: 60;color: control2.enabled ? "transparent" : "#353637";border.color: control2.enabled ? "#21be2b" : "transparent";}}// 界面初始化之后,把control2的text綁定到control1上,這樣control1的text變化,control2的text同步變化Component.onCompleted: {control2.text = Qt.binding(function(){return control1.text});} }綁定之后的屬性(control2.text)如果有control2.text="***"這樣的賦值行為,那么Qt.binding的效果將會失效。
第二種:動態創建對象時初始化屬性
新建一個DynamicText.qml文件如下:
import QtQuick 2.0Text {id: textElementwidth: 200height: 200text: "Default text"property string dynamicText: "Dynamic text"onTextChanged: console.log(text)}新建一個main.qml文件如下:動態創建對象Qt.createObject()
import QtQuick 2.12 import QtQuick.Controls 2.12 Rectangle{implicitWidth: 100;implicitHeight: 80;Item {id: testObjproperty string dynamicText: "dynamicText text"Component.onCompleted: {var c = Qt.createComponent("DynamicText.qml"); // obj1.text 與 testObj.dynamicText+' extra text'綁定,var obj1 = c.createObject(testObj, { 'text': Qt.binding(function() { return dynamicText + ' extra text' }) })testObj.dynamicText = "Modified testObj dynamicText"// this.dynamicText使用DynamicText.qml里面的dynamicText屬性// obj2.text與obj2.dynamicText綁定var obj2 = c.createObject(testObj, { 'text': Qt.binding(function() { return this.dynamicText + ' extra text' }) })obj2.dynamicText = "Modified dynamic text" // 會影響到obj2.text}} }另一種動態創建的main.qml:?
import QtQuick 2.12 import QtQuick.Controls 2.12 Rectangle{implicitWidth: 100;implicitHeight: 80;Item {id: rootproperty string dynamicText: "Root text"Loader {id: loaderOneonLoaded: root.dynamicText = "Modified root text"}Loader {id: loaderTwoonLoaded: item.dynamicText = "Modified dynamic text"; // item代表DynamicText.qml的根節點}Component.onCompleted: {loaderOne.setSource("DynamicText.qml", { 'text': Qt.binding(function() { return dynamicText + ' extra text' }) })loaderTwo.setSource("DynamicText.qml", { 'text': Qt.binding(function() { return this.dynamicText + ' extra text' }) })}} }常見的綁定形式:
Rectangle{implicitWidth: 100;implicitHeight: 100;Rectangle{anchors.top=parent.top; // 這種也是綁定,Qt.binding()不能應用在這種形式當中} }?
總結
以上是生活随笔為你收集整理的QML Qt.binding的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用SublimeREPL 出现系统找不
- 下一篇: gin-binding参数效验