[英]Calling a non-existent member of a C++ object in QML works “as expected” but why?
我正在将QQmlComponent *
作为QVariant::fromValue(comp)
传递给QML。
请注意, QQmlComponent
根本没有任何方法 createObject()
。
但是在QML中,它起作用:
qqmlcompPtr.createObject(p)
在传递QQmlComponent *
的情况下,QML引擎是否可能会进行一些隐式转换? 因为那是QML的Component
元素的一种方法。
我没有注意到有关C ++和QML之间的隐式转换的文章中提到了这一点
看一下QQmlComponent.cpp ,它确实包含一个createObject()
方法,但是它是一个受保护的方法,因此可能没有文档说明。
// QQmlComponent.cpp
void QQmlComponent::createObject(QQmlV8Function *args)
{
Q_D(QQmlComponent);
Q_ASSERT(d->engine);
Q_ASSERT(args);
...
尽管它是受保护的,但它也被声明为Q_INVOKABLE ,因此您可以从QML调用它。 我想它是受保护的方法的原因是,它是从QML的JavaScript而不是从C ++调用的。
// QQmlComponent.h
protected:
QQmlComponent(QQmlComponentPrivate &dd, QObject* parent);
Q_INVOKABLE void createObject(QQmlV8Function *);
Q_INVOKABLE void incubateObject(QQmlV8Function *);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.