我刚刚意识到我几乎可以调用暴露给QML的对象的任何函数。现在我对Q_INVOKABLE感到好奇。 Qt5 docs状态:
[...]任何QML代码都可以访问以下成员 QObject派生类的实例:
属性
方法(提供它们是公共广告位或标记为 Q_INVOKABLE)
- 信号
Since Qt5(在C ++中)我可以像插槽一样调用QObject的任何公共函数,即我不必将它们声明为“公共插槽”。这是否意味着我可以从QML调用任何方法?我无法在文档中找到任何内容。
答案 0 :(得分:8)
是的,您必须使用Q_INVOKABLE
标记QObject的功能,除非它是public slot
才能从QML调用它。
Q_INVOKABLE和slots关键字都会使用Qt meta-system
注册您的函数。不同之处在于,使用Q_INVOKABLE ,您可以返回值。