У меня есть проект, использующий QML, в котором QML имеет объект типа Foo
.Я хочу изменить это так, чтобы у QML был объект типа const Foo
.Как мне это сделать?У меня QML вызывает функцию C ++, которая работала и заняла Foo*
.Я изменил его на const Foo*
(как это должно быть по логике), но я получаю ошибку времени выполнения в строке QML, которая вызывает его, говоря: "Error: Unknown method parameter type: const Foo*
".
Я попытался изменить
qmlRegisterType<Foo>("FooLib", 1, 0, "Foo");
до
qmlRegisterType<const Foo>("FooLib", 1, 0, "Foo");
но безрезультатно.Затем я попытался выполнить
qmlRegisterUncreatableType<Foo>("FooLib", 1, 0, "Foo", "Can't create one");
и заменить мой QML FooLib.Foo {}
вызовом созданного мной фабричного метода, который возвращает Foo*
.Та же ошибка во время выполнения.
Я попытался вернуть свой заводской const Foo*
.Это сделало прогресс.Это делает это не сбой.Тем не менее, я получаю ошибку во время выполнения в QML, например "TypeError: Cannot read property 'bar' of undefined
", когда он пытается получить доступ к Q_PROPERTY
из Foo
.Свойство имеет только READ
, а эта функция-член const
.Ошибка с undefined
заставляет меня думать, что, возможно, QML не знает, что const Foo
совпадает с Foo
, когда дело доходит до const
Q_PROPERTY
с, или что он получает Foo*
с от другихфункции и не знает, что они могут быть преобразованы в const Foo*
с.
Это правильно?QML не может автоматически конвертировать Foo*
в const Foo*
?Как я должен написать const-правильный код?