繁体   English   中英

在QML中调用C ++对象的不存在成员可以“按预期进行”,但是为什么呢?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM