Russian Qt Forum

Qt => Qt Quick => Тема начата: xintrea от Январь 25, 2018, 14:14



Название: Методика запоминания предыдущего значения в QML
Отправлено: xintrea от Январь 25, 2018, 14:14
По причине отсутствия ответов вот в этой теме:

http://www.prog.org.ru/topic_31875_0.html

...хочу разобраться в более общем вопросе. Вопрос звучит так:

Цитировать
Каким образом в языке QML можно организовать запоминание предыдущего значения свойства?

То есть, задача состоит в том, чтобы перед любым изменением свойства запомнить его значение в другое свойство. Проблема в том, что существующий механизм сигналов onИмяСвойстваChanged() испускает сигнал об изменении свойства уже после его изменения. И в этом обработчике невозможно получить предыдущее значение свойства чтобы его запомнить.

Кто что думает? Желательны примеры кода.


Название: Re: Методика запоминания предыдущего значения в QML
Отправлено: kuzulis от Январь 25, 2018, 14:32
Создаешь еще одну переменную и запоминаешь туда значение.. А в чем проблема то?


Название: Re: Методика запоминания предыдущего значения в QML
Отправлено: xintrea от Январь 25, 2018, 15:12
Смотри. Код, который находится "выше", задает значение путем установки свойства:

Код:
    RibbonImage {
        targetDigit: timeString.charAt(5)
    }

Он ничего не знает (и не должен знать) про предыдущее значение. Значит, запоминаться предыдущее значение targetDigit должно в самом типе (в нашем случае в RibbonImage).

Отследить изменение свойства targetDigit мы можем с помощью обработчика onTargetDigitChanged(). Но внутри него невозможно сохранить предыдущее значение targetDigit в какое-нибудь еще одно свойство previousDigits. А невозможно потому, что это targetDigit в момент вызова обработчика уже новое. И не из чего получить предыдущее значение, чтобы его запомнить в другом свойстве.


Название: Re: Методика запоминания предыдущего значения в QML
Отправлено: kibsoft от Январь 25, 2018, 23:22
Тогда не свойство напрямую менять, а сделать метод-сеттер для свойства и там уже запоминать предыдущее значение.


Название: Re: Методика запоминания предыдущего значения в QML
Отправлено: xintrea от Январь 26, 2018, 14:02
Тогда не свойство напрямую менять, а сделать метод-сеттер для свойства и там уже запоминать предыдущее значение.

Да с сеттером (а не с обработчиком) можно. Но тогда надо всю структуру кода менять, который изначально расчитывался на биндинги.

На самом деле, есть возможность даже при биндинге правильно устанавливать предыдущее значение. Обсуждение вот тут:

https://www.linux.org.ru/forum/development/13981618