我将 QQmlComponent *
作为 QVariant::fromValue(comp)
传递给 QML。
注意 QQmlComponent
doesn't have any method createObject()
无论如何。
然而在 QML 中这是可行的:
qqmlcompPtr.createObject(p)
在传递 QQmlComponent *
的情况下,QML 引擎是否可能会进行一些隐式转换?因为这是 QML 的 Component
元素的方法。
我没有注意到 article on implicit conversions between C++ and QML 中提到了这一点
最佳答案
看看QQmlComponent.cpp , 它确实包含一个 createObject()
方法,但它是一个 protected 方法,因此它可能没有记录。
// QQmlComponent.cpp
void QQmlComponent::createObject(QQmlV8Function *args)
{
Q_D(QQmlComponent);
Q_ASSERT(d->engine);
Q_ASSERT(args);
...
虽然它受到保护,但它也被声明为 Q_INVOKABLE ,因此您可以从 QML 调用它。我想它是一个 protected 方法的原因是它应该从 QML 的 JavaScript 而不是从 C++ 调用。
// QQmlComponent.h
protected:
QQmlComponent(QQmlComponentPrivate &dd, QObject* parent);
Q_INVOKABLE void createObject(QQmlV8Function *);
Q_INVOKABLE void incubateObject(QQmlV8Function *);
关于c++ - 在 QML 中调用 C++ 对象的不存在成员有效 "as expected"但为什么呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27315420/