是否有可能获得QQuickItem布局更改事件?

时间:2018-05-15 11:43:10

标签: qt events qml signals qquickitem

QQuickItem布局是否有可能改变?

当布局/尺寸(x,y,宽度或高度)发生变化时,有没有办法触发功能?

有可能连接每个属性信号变化,但这不是正确的方法。

已经尝试过windowChanged信号,但它不起作用。

我想要做的是每次我的QQuickItem布局/大小(任何这些)改变时调用提供x(GLOBAL),y(GLOBAL),宽度,高度的extrenal java函数。

编辑: 渲染完成后我需要知道几何体。所以我不能自己连接到每个房产。

1 个答案:

答案 0 :(得分:2)

将每个属性连接到单个函数,该函数检查“几何”与某个已保存变量的比较,如果某些内容不匹配,则发出新信号

Item {
   id: myItem
   onXChanged: { myItem.checkGeometry() }
   onYChanged: { myItem.checkGeometry() }
   onWidthChanged: { myItem.checkGeometry() }
   /* etc etc */

   signal: geometryChanged(var _x, var _y, var _width, var _height)

   property var  oldGeometry: [ myItem.x, myItem.y, myItem.width, myItem.height]
   function checkGeometry() { 
     var geometryToCheck = [mapToGlobal(myItem.x), mapToGlobal(myItem.y), myItem.width, myItem.height];
     for (var i=0; i<oldGeometry.length; i++) {
          if (oldGeometry[i] !== geometryToCheck[i]) {
               myItem.geometryChanged(mapToGlobal(myItem.x), mapToGlobal(myItem.y), myItem.width, myItem.height);
               myItem.oldGeometry = geometryToCheck;
               break;
          }
     }
   }