Всякий раз, когда я создавал Q_PROPERTY
для дальнейшего использования в Qml я всегда создавал сигнал уведомления, чтобы сообщить qml, что данные изменились и должны быть переоценены.
Теперь имея Q_PROPERTY
типа QQmlListProperty<T>
Как я могу сигнализировать, что элемент был изменен, добавлен или удален?
Это вообще возможно?
Если у вас есть список, не может быть propertyChanged()
сигнал, потому что сохраненная ссылка на объект останется прежней.
В списке не будет свойств, поэтому сигнал не генерируется.
Вы могли бы вместо этого использовать потомок QAbstractListModel
который предназначен для решения этой проблемы, оборачивая методы для добавления, вставки и т. д. в собственные методы, которые затем будут генерировать dataChanged
сигнал, который несет информацию, необходимую для поиска изменений.
Конечно, вы могли бы реализовать что-то подобное самостоятельно, обернув QList
в другом объекте, который имеет сигнал, который сообщит вам об изменении данных. Однако это не очень хорошо интегрируется с QML в качестве реальной модели, по крайней мере, представление будет обновляться автоматически, когда dataChanged
сигнал получен, и они даже только обновляют то, что необходимо.
Не так, если model
из View
изменяется напрямую, как может случиться, если вы вручную вызовете modelChanged()
, В этом случае View
будет пропустить информацию об измененных деталях, поэтому он просто полностью воссоздает себя.
Других решений пока нет …