Я использую QQmlListProperty
в виде «мастер-класса», который одновременно является и моделью, и свойством списка qml, позволяя легко декларативную разметку магистралей объекта, которая может изменяться или не изменяться, а также генерировать / консолидировать код во время выполнения из динамической структуры. Я поделился чем-то приблизительным в этот ответ.
Я не имею ни малейшего представления о фактических деталях реализации, но что вызывает у меня «чувство паука», так это следующие фрагменты документации:
QQmlListProperty::QQmlListProperty(QObject *object, QList<T *> &list)
— тот, который я сейчас использую, утверждает, что:
Обычно этот конструктор не должен использоваться в производственном коде, как
QList с возможностью записи нарушает правила управления памятью QML.
Причина, по которой я реализую QQmlListProperty
является то, что я хочу использовать парсер / фабрику qtquick или что-то еще, чтобы иметь возможность создавать данные моей модели из обычного кода QML. Естественно, отсутствие методов вставки и удаления из QQmlListProperty
API сам по себе не является причиной для беспокойства, так как такая функциональность не требуется для предназначенной цели, то есть для анализа кода и создания объектов по мере необходимости, для этого добавления достаточно. Причиной моей озабоченности является «доступный для записи QList нарушает правила управления памятью QML«поскольку конечный результат будет позже изменен. Не то, чтобы добавление не квалифицировалось как написание, но тем не менее, я беспокоюсь о возможных негативных последствиях« нарушения правил управления памятью в QML ». Особенно после проблем с объекты, уничтожаемые во время использования Я наткнулся на.
В общем случае кажется, что можно и не проблематично вносить изменения во время выполнения в структуру, созданную путем анализа файлов QML, даже если у нее есть идентификаторы, например:
Rectangle {
width: 50
height: 50
Rectangle {
id: c
width: 10
height: 10
color: "red"}
Rectangle {
y: 20
width: 10
height: 10
color: "red"}
Component.onCompleted: c.destroy()
}
однако в некоторых случаях говорится, что объект нельзя уничтожить динамически или что-то в этом роде.
Так что я могу создавать структуры объектов из файлов QML, реализуя QQmlListProperty
и внесение изменений в эти структуры позже в свете смутного предупреждения о том, что «записываемый QList нарушает правила управления памятью QML»?
Задача ещё не решена.
Других решений пока нет …