Испускает ли элемент сигнал, когда его положение/размер изменяется в QML?

У меня есть холст, который содержит несколько MouseAreas, которые можно перетаскивать. Холст рисует некоторые украшения между этими элементами, которые не могут быть выражены как собственные элементы QML.

Как я могу инициировать перерисовку холста, когда элемент меняет размер или положение? Я знаю, что мне нужно вызвать canvas.requestPaint(), но при каком событии? Единственное решение, которое я нашел до сих пор, это вызов requestPaint() в пределах таймера, но я хочу избежать этого из-за соображений производительности.


person grefab    schedule 14.11.2013    source источник


Ответы (1)


Согласно документации QML каждое свойство компонента QML имеет неявный сигнал, связанный с изменением значения свойства:

Обработчики сигналов для сигнала изменения свойства имеют синтаксическую форму on<Property>Changed, где <Property> — это имя свойства с заглавной первой буквой. Например, хотя документация по типу TextInput не документирует сигнал textChanged, этот сигнал неявно доступен благодаря тому факту, что TextInput имеет свойство text, поэтому можно написать обработчик сигнала onTextChanged, который будет вызываться при каждом изменении этого свойства.

person koopajah    schedule 14.11.2013
comment
Если да, то какое свойство лучше всего использовать для определения изменения положения и размера? - person rakslice; 31.03.2017
comment
Я давно не использовал QML, но я думаю, что вы хотите onWidthChanged или onHeightChanged, а затем onXChanged или onYChanged - person koopajah; 31.03.2017
comment
Да, в итоге я просто подключил onWidthChanged и onHeightChanged, и это, кажется, уловило все необходимые изменения размера. Спасибо! - person rakslice; 03.04.2017