Russian Qt Forum
Ноябрь 22, 2024, 19:06 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Методика запоминания предыдущего значения в QML  (Прочитано 4669 раз)
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« : Январь 25, 2018, 14:14 »

По причине отсутствия ответов вот в этой теме:

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

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

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

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

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

Собираю информацию по крупицам
http://webhamster.ru
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Январь 25, 2018, 14:32 »

Создаешь еще одну переменную и запоминаешь туда значение.. А в чем проблема то?
Записан

ArchLinux x86_64 / Win10 64 bit
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #2 : Январь 25, 2018, 15:12 »

Смотри. Код, который находится "выше", задает значение путем установки свойства:

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

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

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

Собираю информацию по крупицам
http://webhamster.ru
kibsoft
Хакер
*****
Offline Offline

Сообщений: 625


Просмотр профиля WWW
« Ответ #3 : Январь 25, 2018, 23:22 »

Тогда не свойство напрямую менять, а сделать метод-сеттер для свойства и там уже запоминать предыдущее значение.
Записан

http://kibsoft.ru - Download the Qt Media Encoding Library here

The apps that were written using QtMEL:
http://srecorder.com - Screen recording software
xintrea
Супер активный житель
*****
Offline Offline

Сообщений: 754



Просмотр профиля WWW
« Ответ #4 : Январь 26, 2018, 14:02 »

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

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

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

https://www.linux.org.ru/forum/development/13981618
Записан

Собираю информацию по крупицам
http://webhamster.ru
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.073 секунд. Запросов: 23.