我有一个使用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*
。那取得了进步。这样就不会崩溃。但是,我在尝试访问TypeError: Cannot read property 'bar' of undefined
的{{1}}时,在QML中遇到“ Q_PROPERTY
”这样的运行时错误。该属性只有一个Foo
,该成员函数是READ
。关于const
的错误使我认为QML可能不知道undefined
与const Foo
时Foo
与const
是相同的,或者它正在从其他函数中获得Q_PROPERTY
s,并且不知道可以将其转换为Foo*
s。
是吗? QML是否无法自动将const Foo*
转换为Foo*
?我应该如何编写const正确的代码?