在Qt5中,Q_INVOKABLE是否需要从QML调用公共QObject函数?

Man*_*d3r 4 c++ qt qml qt5

我刚刚意识到我几乎可以调用暴露给QML的对象的任何函数.现在我对Q_INVOKABLE感到好奇.Qt5 文档声明:

[...]任何QML代码都可以访问QObject派生类的实例的以下成员:

  • 属性

  • 方法(提供它们是公共插槽或标记为Q_INVOKABLE)

  • 信号

从Qt5(在C++中)开始,我可以像插槽一样调用QObject的任何公共函数,即我不必将它们声明为"公共插槽".这是否意味着我可以从QML调用任何方法?我无法在文档中找到任何内容.

tal*_*aki 8

是的,您必须标记QObject的功能,Q_INVOKABLE除非它是public slot为了能够从QML调用它.

Q_INVOKABLE和slots关键字都会注册您的函数Qt meta-system.不同之处在于使用Q_INVOKABLE 可以返回值.

  • 从技术上讲,插槽也可以返回值.当插槽用作插槽(连接到信号)时,它们会被忽略.在这种情况下,Q_INVOKABLE是更好的风格. (2认同)