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

标签 c++ qt function qml qtquick2

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

相关文章:

jquery - 使用 jquery 脚本作为函数

c++ - 函数类型用于什么?

C++ - string.replace 不起作用

c++ - 使用 malloc() 和 free() 实现一个简单的分配器类

c++ - C++ 真实世界应用程序的 GUI 框架

在 R 中返回不可见和可见的输出

c++ - 可变参数模板函数的部分特化

c++ - 为什么无法访问基类的函数重载

c++ - 在静态函数中发出信号

QTableWidget 在纸上打印表格