Можно ли получить событие изменения макета QQuickItem? - PullRequest
0 голосов
/ 15 мая 2018

Возможно ли изменение макета QQuickItem?

Есть ли способ вызвать функцию при изменении макета / размера (x, y, ширина или высота)?

Существует способ подключения при каждом правильном изменении сигнала, но это не правильный путь.

Уже пробовал сигнал windowChanged, но он не работает для этого.

То, что я пытаюсь сделать, - это вызывать внешнюю Java-функцию, обеспечивающую x (GLOBAL), y (GLOBAL), width, height каждый раз, когда меняются макет / размер QQuickItem (любой из них).

редактирование: Мне нужно знать геометрию после рендеринга. Поэтому я не могу подключиться к каждому свойству самостоятельно.

1 Ответ

0 голосов
/ 20 мая 2018

Подключите каждое свойство к одной функции, которая проверяет «геометрию» по сравнению с некоторой сохраненной переменной, и, если что-то не совпадает, выдает новый сигнал

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;
          }
     }
   } 
...