Экспонировать operator []

Рейтинг: 0Ответов: 1Опубликовано: 13.02.2023

Как при экспонировании объекта из c++ в js предоставить доступ к члену operator [] ? Т.е. хочется, чтобы объект выглядел в js как массив.

Для встраивания JS использую движок QJSEngine.

Пытаюсь:

struct TablePrototype
{
    Q_GADGET
    Q_PROPERTY(int rows    READ getRowCount) // ok
    Q_PROPERTY(int columns READ getColumnCount)

    int getRowCount() const;
    int getColumnCount() const;

    Q_INVOKABLE QVariant operator [] ( int index ) const; // не работает.
}

Ошибок компиляции не получаю, но в run-time: TypeError: Cannot read property '0' of undefined. Т.е. Нужет метод с каким-то специальным именем?

Ответы

▲ 1

Кажется QQmlListProperty то что вам нужно. Тут Extending QML - Object and List Property Types Example пример регистрации такой проперти-списка с соответствующими функциями добавления, обращения по индексу, удаления и прочих.