Как наиболее просто и правильно организовать для свойств класса поведение, аналогичное «транзакции» (или ctrl-z)?
Добрый день!
Есть некий класс, с Q_PROPERTY(....)
Из UI задаются им значения.
После установки вызываю метод подтверждения транзакции.
При установке значений возможна ситуация, когда нужно отменить все сделанные изменения и вернуться к предыдущим значениям всех свойств (на момент, когда предыдущая транзакция была подтверждена).
Пока что я при подтверждении транзакции я заношу в массив значения всех свойств,
при отмене, соответственно восстанавливаю оттуда.
Что не устраивает - нужно каждое свойство прописывать руками для каждого класса, в котором нужно такое поведение, что несколько утомляет, да и уже пару раз столкнулся с ошибкой копи-паста.
В идеале решение проблемы было бы унаследоваться от какого-либо класса, где были бы реализованы функции подтверждения и отмены транзакции, что бы все свойства запоминались или восстанавливались.
Подскажите, пожалуйста, куда копать и как бы реализовать?
fshp, а, если в классе динамически выделяется метров 100 на куче - хранить на стеке копию класса весом > 100 метров? указатель хранить не получится, поскольку при изменении свойств исходного экземпляра изменятся свойства и экзепмляра в стэке, поскольку это один и тот же экземпляр по сути. Ваш метод годен для легких классов без свойст на куче.