gpt4 book ai didi

c++ - 在 QML 中调用 C++ 对象的不存在成员有效 "as expected"但为什么呢?

转载 作者:行者123 更新时间:2023-11-30 03:58:40 25 4
gpt4 key购买 nike

我将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com