我有这段代码。
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的解决方案是什么?感谢
答案 0 :(得分:3)
元对象系统必须知道这些方法才能从QML中调用。这意味着方法必须是:
Q_SIGNAL
)或Q_SLOT
)或Q_INVOKABLE
)。在Qt 5中,插槽和可调用方法之间的区别仅在于,当您迭代其元对象数据时,该方法是否列在插槽中。除此之外,插槽和可调用方法是等效的。
在Qt 5中,您可以从{+ 1}}从C ++到任何方法,即使它不是插槽/可调用的,但这些方法只有C ++编译器所知,not to QML。