我正在将QQmlComponent *
传递给QML作为QVariant::fromValue(comp)
。
请注意,无论如何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);
...
尽管它是 protected ,但它也被声明为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 *);