Обнаружение изменений в свойстве после изменения значения - PullRequest
0 голосов
/ 13 октября 2019

В настоящее время я работаю в проекте с Qt QML, и у меня есть тип, у которого есть свойство (содержит объект JavaScript), и его ссылка постоянно меняется.

Что я хочу сделать, это обнаружитьизменения в этом свойстве и сравнить с кэшированным.

Я рассмотрел Привязка свойства Qt , но функция обратного вызова выполняется до того, как изменение произойдет, и свойство получает значениевозврат обратного вызова. Я хочу, чтобы после этого что-то было выполнено (изменение свойства), потому что мне нужно обновить свойство dataset перед тем, как отправлять сигналы (в коде сигналы излучаются с отражением типа, в обратном вызове forEach).

Что я сделал до сих пор:

Item {
    id: root

    property var dataset

    Component.onCompleted: {
        dataset = Qt.binding(function(){
            return MediaWatcherHelper.formatDataset(internals.metadata);

            // I want this code to execute after the binding occurs, but I obviously can't execute things after the return.
            MediaWatcherHelper.detectChanges(root.dataset, internals.cache)
                .forEach(it => root[`${it}Change`](dataset[it]));

            internals.cache = root.dataset; // And update the cache
        });
    }

    signal trackIdChange(string trackId)
    signal albumChange(string album)
    signal artistChange(var artist)
    signal titleChange(string title)
    signal urlChange(url url)
}

1 Ответ

1 голос
/ 15 октября 2019

Вы всегда можете сохранить предыдущее значение и соответственно обновить его.

property int myCurrentValue: 10
property int myLastValue: myCurrentValue

onMyCurrentValueChanged: {
    console.log("current: " + myCurrentValue + ", last:" + myLastValue)
    myLastValue = myCurrentValue;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...