Мне интересно, возможно ли в QML определить собственный класс списка, который можно использовать в QML.
В настоящее время я анализирую более или менее сложные структуры данных и транслирую их в дерево QVariantMap, QVariantList и QVariants.
Однако эти типы могут включать в себя довольно большие массивы большинства основных типов (uint8_t, uint16_t, ..., uint64_t, int8_t, ..., float, double).
Я бы предпочел, чтобы мне не приходилось копировать эти массивы в QVariantList по очевидным причинам производительности.
Можно ли как-нибудь обернуть массив в пользовательский тип, который обеспечивает доступ к элементам так, как QML понимает, и, таким образом, копирует элементы в QVariant только по запросу?
Я пытался зарегистрировать тип с помощью Q_INVOKABLE operator[]
, но, похоже, это не сработало.
Обновление:
Чтобы уточнить немного больше. Я знаю, что могу создать класс с пользовательскими свойствами, которые могут предоставить методы доступа. Однако с помощью метода QVariantList я могу сделать следующее в QML
onMessage: {
element.text = message.poses[0].position.x
}
Я ищу способ обернуть массив таким образом, чтобы фактическая реализация не была заметна в QML, то есть он должен выглядеть как обычный массив, к которому можно обращаться с помощью оператора скобок и т. Д. Тот факт, что он на самом деле просто обертка должна быть полностью прозрачной для пользователя.