Как правильно уведомить в свойствах QQmlListProperty?

Всякий раз, когда я создавал Q_PROPERTY для дальнейшего использования в Qml я всегда создавал сигнал уведомления, чтобы сообщить qml, что данные изменились и должны быть переоценены.

Теперь имея Q_PROPERTY типа QQmlListProperty<T> Как я могу сигнализировать, что элемент был изменен, добавлен или удален?

Это вообще возможно?

3

Решение

Если у вас есть список, не может быть propertyChanged() сигнал, потому что сохраненная ссылка на объект останется прежней.
В списке не будет свойств, поэтому сигнал не генерируется.

Вы могли бы вместо этого использовать потомок QAbstractListModel который предназначен для решения этой проблемы, оборачивая методы для добавления, вставки и т. д. в собственные методы, которые затем будут генерировать dataChanged сигнал, который несет информацию, необходимую для поиска изменений.

Конечно, вы могли бы реализовать что-то подобное самостоятельно, обернув QList в другом объекте, который имеет сигнал, который сообщит вам об изменении данных. Однако это не очень хорошо интегрируется с QML в качестве реальной модели, по крайней мере, представление будет обновляться автоматически, когда dataChanged сигнал получен, и они даже только обновляют то, что необходимо.

Не так, если model из View изменяется напрямую, как может случиться, если вы вручную вызовете modelChanged(), В этом случае View будет пропустить информацию об измененных деталях, поэтому он просто полностью воссоздает себя.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]