В документации сказано, что этот контейнер будет автоматически преобразован в массив JS.Вам не нужно ничего регистрировать.
Конечно, преобразование будет копией, поэтому изменение его не приведет к изменению исходного массива, и то, как вы используете его, аналогично тому, как вы используете обычный JSмассив.Он определенно должен иметь свойство length
(не length()
) и доступ к индексу поддержки через []
.
Обновление:
После ваших историй неудач я решил на самом деле запустить простойtest:
class Test : public QObject {
Q_OBJECT
public slots:
std::vector<int> test() { return std::vector<int> {1, 2, 3, 4, 5, 6, 7}; }
};
// in main.cpp
qmlRegisterType<Test>("Core", 1, 0, "Test");
// in qml
Test {
Component.onCompleted: {
var t = test()
console.log(t.length, t) // qml: 7 [1,2,3,4,5,6,7]
}
}
Как видите, он дает ожидаемый результат, не нужно ничего регистрировать.
IIRC была проблема с Qt, которая по какой-то причине вызвала эти автоматические преобразования, а не , когда вы используете интерфейс Q_PROPERTY
.Я полагаю, что проблема по-прежнему актуальна, и, к счастью, решение состоит в том, чтобы просто использовать не свойство, а простое возвращаемое значение.
Если ваши проблемы сохраняются, я предлагаю тщательно изучить ваш код или, если необходимо, очистить и восстановитьваш проект, потому что преобразование определенно работает, как и ожидалось, за исключением вопроса, связанного с недвижимостью.