对于属性上的NOTIFY信号,如果我给它一个参数会有什么不同?

时间:2017-03-18 03:39:26

标签: c++ qt qml qt-signals qproperty

假设我有一个类似这样的类:

class Something : QObject {
  Q_PROPERTY(int something READ getSomething NOTIFY somethingChanged)

  // ...

  signals:
    void somethingChanged();
}

根据文档,将somethingChanged声明为void somethingChanged()void somethingChanged(int)(请注意参数)均有效。 为什么我要以另一种方式做到这一点?

1 个答案:

答案 0 :(得分:2)

发出该值允许您使用该值,而无需引用它所属的对象。这是通常在C ++ API中完成的事情,这使您无需手动保持对对象的引用,以便您可以在更改通知时读取值。请注意,即使这样,您也可以使用QObject::sender()在必要时查找发件人对象,但发布值更为直接。

在QML中,大多数时候最终使用的是绑定,这些绑定非常快速且功能强大,并且涉及对对象的引用,并且更改通知会导致引用属性的绑定表达式自动重新评估。因此,没有必要发出实际值。

没有什么能阻止你拥有两全其美的优势。发出新值的通知信号似乎与QML绑定一起正常工作。因此,如果由于某种原因你需要发出一个值,不要回避它,它不会危及QML的兼容性。