1

QQuickItem 布局是否有可能发生变化?

有没有办法在布局/大小(x、y、宽度或高度)改变时触发功能?

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

已经尝试过 windowChanged 信号,但它不适用于此。

我想要做的是每次我的 QQuickItem 布局/大小(其中任何一个)更改时调用提供 x(GLOBAL),y(GLOBAL),width,height 的外部 java 函数。

编辑:渲染完成后我需要知道几何图形。所以我不能单独连接到每个属性。

4

1 回答 1

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;
          }
     }
   } 
于 2018-05-20T02:54:48.580 回答