我将QQmlComponent *作为QVariant::fromValue(comp)传递给QML。
请注意,QQmlComponent 没有任何方法 createObject()无论如何。
然而,在QML中,这是可行的:
qqmlcompPtr.createObject(p) 在传递QQmlComponent *的情况下,QML引擎可能会执行一些隐式转换吗?因为这是QML的Component元素的一种方法。
我没注意到关于C++与QML之间隐式转换的文章里提到过这个
发布于 2014-12-05 23:41:02
看看QQmlComponent.cpp,它确实包含了一个createObject()方法,但是它是一个受保护的方法,因此它可能没有文档化。
// QQmlComponent.cpp
void QQmlComponent::createObject(QQmlV8Function *args)
{
Q_D(QQmlComponent);
Q_ASSERT(d->engine);
Q_ASSERT(args);
...虽然它是受保护的,但它也被声明为可援用,因此您可以从QML调用它。我想,它之所以是一个受保护的方法,是因为它是从QML的JavaScript调用的,而不是从C++调用的。
// QQmlComponent.h
protected:
QQmlComponent(QQmlComponentPrivate &dd, QObject* parent);
Q_INVOKABLE void createObject(QQmlV8Function *);
Q_INVOKABLE void incubateObject(QQmlV8Function *);https://stackoverflow.com/questions/27315420
复制相似问题