日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

QML Qt.binding

發(fā)布時(shí)間:2023/12/16 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 QML Qt.binding 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Qt.bindding的執(zhí)行由QML引擎監(jiān)控,一旦滿足綁定條件就會響應(yīng)。

第一種:為屬性綁定一段代碼

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的效果將會失效。

第二種:動態(tài)創(chuàng)建對象時(shí)初始化屬性

新建一個(gè)DynamicText.qml文件如下:

import QtQuick 2.0Text {id: textElementwidth: 200height: 200text: "Default text"property string dynamicText: "Dynamic text"onTextChanged: console.log(text)}

新建一個(gè)main.qml文件如下:動態(tài)創(chuàng)建對象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}} }

另一種動態(tài)創(chuàng)建的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的根節(jié)點(diǎn)}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' }) })}} }
  • Qt.binding()中可以訪問對象的屬性
  • Qt.binding()中可以訪問對象的方法
  • 可以使用QML內(nèi)置的JavaScript的對象
  • 常見的綁定形式:

    Rectangle{implicitWidth: 100;implicitHeight: 100;Rectangle{anchors.top=parent.top; // 這種也是綁定,Qt.binding()不能應(yīng)用在這種形式當(dāng)中} }

    ?

    總結(jié)

    以上是生活随笔為你收集整理的QML Qt.binding的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。