找回密码
 立即注册
收起左侧

关于Qt.binding的一个小思考

3
回复
7954
查看
[复制链接]
累计签到:7 天
连续签到:1 天
来源: 2017-5-30 08:14:15 显示全部楼层 |阅读模式
1Qter豆
Qt.binding函数,好像不可以写在for循环中:上代码
错误代码:
  1. import QtQuick 2.7
  2. import QtQuick.Controls 1.5

  3. Item {
  4.     property var objList1: []
  5.     property var objList2: []

  6.     id: root

  7.     Component {
  8.         id: comp
  9.         QtObject {
  10.             property int iD
  11.             property int testVar : -1
  12.             onTestVarChanged: {
  13.                 console.debug(iD,testVar)
  14.             }
  15.         }
  16.     }

  17.     function bind(i) {
  18.         objList2[i].testVar = Qt.binding(function(){
  19.             return objList1[i].testVar
  20.         })
  21.     }

  22.     Component.onCompleted: {
  23.         var i;
  24.         for(i = 0; i < 5; i++) {
  25.             objList1.push(comp.createObject(root))
  26.             objList1[i].iD = i
  27.         }
  28.         for(i = 0; i < 5; i++) {
  29.             objList2.push(comp.createObject(root))
  30.             objList2[i].iD = i + 100
  31.             objList2[i].testVar = Qt.binding(function(){
  32.                 return objList1[i].testVar
  33.             })
  34.             //bind(i)
  35.         }

  36.         objList1[0].testVar = 1
  37.         objList1[1].testVar = 2
  38.         objList1[2].testVar = 3
  39.         objList1[3].testVar = 4
  40.         objList1[4].testVar = 5

  41.     }
  42. }
复制代码


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

  3. Item {
  4.     property var objList1: []
  5.     property var objList2: []

  6.     id: root

  7.     Component {
  8.         id: comp
  9.         QtObject {
  10.             property int iD
  11.             property int testVar : -1
  12.             onTestVarChanged: {
  13.                 console.debug(iD,testVar)
  14.             }
  15.         }
  16.     }

  17.     function bind(i) {
  18.         objList2[i].testVar = Qt.binding(function(){
  19.             return objList1[i].testVar
  20.         })
  21.     }

  22.     Component.onCompleted: {
  23.         var i;
  24.         for(i = 0; i < 5; i++) {
  25.             objList1.push(comp.createObject(root))
  26.             objList1[i].iD = i
  27.         }
  28.         for(i = 0; i < 5; i++) {
  29.             objList2.push(comp.createObject(root))
  30.             objList2[i].iD = i + 100
  31.             //objList2[i].testVar = Qt.binding(function(){
  32.             //    return objList1[i].testVar
  33.             //})
  34.             bind(i)
  35.         }

  36.         objList1[0].testVar = 1
  37.         objList1[1].testVar = 2
  38.         objList1[2].testVar = 3
  39.         objList1[3].testVar = 4
  40.         objList1[4].testVar = 5

  41.     }
  42. }
复制代码
请问这能说明什么问题?Qt.binding是静态绑定?

回复

使用道具 举报

累计签到:7 天
连续签到:1 天
2017-5-30 08:15:21 显示全部楼层
改动部分:
只是把
            objList2[i].testVar = Qt.binding(function(){
                return objList1[i].testVar
            })
放入了一个新函数中就没问题了,但是放在for中就会出错
回复

使用道具 举报

累计签到:5 天
连续签到:1 天
2017-6-2 17:16:14 显示全部楼层
是的  一般bingding都不要放在for循环里
回复

使用道具 举报

累计签到:7 天
连续签到:1 天
2017-6-5 19:07:42 显示全部楼层
cycloveu 发表于 2017-6-2 17:16
是的  一般bingding都不要放在for循环里

请问这是为什么呢?
只是多了一个函数而已...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了