Название: Связывание свойств в QML: почему не работает? Отправлено: xintrea от Январь 18, 2018, 13:42 Делаю я сейчас самодельный тип для отображения компаса. Компас состоит из корпуса и стрелки. Для корпуса и стрелки подготовлены PNG-рисунки.
Размер корпуса на экране зависит от размера области, в которую он вставляется (кстати, эта область гарантированно квадратная): Код: Image { Таким образом, корпус компаса приобретает некий масштаб. И его нужно использовать при отрисовке стрелки, чтобы масштаб стрелки соответствовал масштабу компаса. Для вычисления и запоминания масштаба я создаю свойство elementScale: Код: property int elementScale: mathScale(sourceSize.width, width) В логе я вижу такие значения: Код: qml: Compass scale NaN И это свойство я пытаюсь применить к стрелке: Код: Image { Но оно, как я выяснил, на момент использования содержит нуливое значение, и стрелка приобретает нуливой масштаб и становится нуливого размера. А выяснил я это так: Код: scale: printScale(compassCase.elementScale) А в логе получается вот такое: Код: qml: Compass scale NaN Я не понимаю, почему после последнего изменения масштаба компаса (значение 0.61) не пересчитывается значение масштаба для стрелки? Ведь на эти значения (compassCase.elementScale и scale для arrow) вроде как распространяется связывание свойств (property binding)? Вот, для понимания, весь код: Код: Image { Название: Re: Связывание свойств в QML: почему не работает? Отправлено: xintrea от Январь 23, 2018, 13:45 Отвечаю сам себе. Оказывается, механизм property binding не распространяется на свойства, которые получают свои значения из JavaScript функций. Для того, чтобы заработал property binding, надо обернуть JavScript-функцию конструкцией Qt.binding( ... ), как на примере:
Код: Keys.onSpacePressed: { Здесь видно, что оборачивается безымянная функция, которая прописана прямо на месте своего использования. Как обернуть именованную функцию, в документации не сказано, надо разбираться дальше. |