• 3309阅读
  • 1回复

[讨论]关于Qt.binding的一个小思考 [复制链接]

上一主题 下一主题
离线leamus
 

只看楼主 倒序阅读 楼主  发表于: 2017-05-30
Qt.binding函数,好像不可以写在for循环中:上代码
错误代码:
import QtQuick 2.7
import QtQuick.Controls 1.5

Item {
    property var objList1: []
    property var objList2: []

    id: root

    Component {
        id: comp
        QtObject {
            property int iD
            property int testVar : -1
            onTestVarChanged: {
                console.debug(iD,testVar)
            }
        }
    }

    function bind(i) {
        objList2.testVar = Qt.binding(function(){
            return objList1.testVar
        })
    }

    Component.onCompleted: {
        var i;
        for(i = 0; i < 5; i++) {
            objList1.push(comp.createObject(root))
            objList1.iD = i
        }
        for(i = 0; i < 5; i++) {
            objList2.push(comp.createObject(root))
            objList2.iD = i + 100
            objList2.testVar = Qt.binding(function(){
                return objList1.testVar
            })
            //bind(i)
        }

        objList1[0].testVar = 1
        objList1[1].testVar = 2
        objList1[2].testVar = 3
        objList1[3].testVar = 4
        objList1[4].testVar = 5

    }
}

复制代码


正确代码:
import QtQuick 2.7
import QtQuick.Controls 1.5

Item {
    property var objList1: []
    property var objList2: []

    id: root

    Component {
        id: comp
        QtObject {
            property int iD
            property int testVar : -1
            onTestVarChanged: {
                console.debug(iD,testVar)
            }
        }
    }

    function bind(i) {
        objList2.testVar = Qt.binding(function(){
            return objList1.testVar
        })
    }

    Component.onCompleted: {
        var i;
        for(i = 0; i < 5; i++) {
            objList1.push(comp.createObject(root))
            objList1.iD = i
        }
        for(i = 0; i < 5; i++) {
            objList2.push(comp.createObject(root))
            objList2.iD = i + 100
            //objList2.testVar = Qt.binding(function(){
            //    return objList1.testVar
            //})
            bind(i)
        }

        objList1[0].testVar = 1
        objList1[1].testVar = 2
        objList1[2].testVar = 3
        objList1[3].testVar = 4
        objList1[4].testVar = 5

    }
}

复制代码
请问这能说明什么问题?Qt.binding是静态绑定?
离线leamus

只看该作者 1楼 发表于: 2017-05-30
改动部分:
只是把
             objList2.testVar = Qt.binding(function(){
                 return objList1.testVar
             })
放入了一个新函数中就没问题了,但是放在for中就会出错
快速回复
限100 字节
 
上一个 下一个