gpt4 book ai didi

c++ - 将 C++ 类暴露给 QML

转载 作者:搜寻专家 更新时间:2023-10-31 01:34:48 26 4
gpt4 key购买 nike

我有这个代码。

class Pet
{
public:
Pet(const QString& nm)
: name(nm)
{}

const QString& name() const { return nm; }

private:
QString nm;
}

class Dog : public QObject, public Pet
{
Q_OBJECT
public:
Dog(QObject* prnt)
: QBject(prnt),
Pet("Tommy")
{}
}

将此公开给 QML

QQmlApplicationEngine engine;
engine.rootContext()->setProperty("petDog", new Dog(&engine));

//QML 项

console.log(petDog.name()) // TypeError: Property 'name' of object Dog(0x0XXXXX) is not a function

将 C++ 类的所有方法暴露给 QML 的解决方案是什么?谢谢

最佳答案

元对象系统必须知道这些方法才能从 QML 调用。这意味着方法必须是:

  1. 一个信号(Q_SIGNAL),或者
  2. 一个插槽(Q_SLOT),或者
  3. 可调用(Q_INVOKABLE)。

在 Qt 5 中,槽和可调用方法之间的区别仅在于当您迭代其元对象数据时该方法是否列在槽中。除此之外,插槽和可调用方法是等价的。

在 Qt 5 中,您可以connect 从 C++ 到任何方法,即使它不是槽/可调用的,但此类方法只有 C++ 编译器知道,not to QML .

关于c++ - 将 C++ 类暴露给 QML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38572784/

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