假设我有一个看起来像这样的课:

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

  // ...

  signals:
    void somethingChanged();
}

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

最佳答案

发出该值可让您使用该值而无需引用它是其属性的对象。这是C++ API中通常执行的操作,这使您不必手动保留对对象的引用,从而可以在更改通知时读入值。请注意,即使在那时,您也可以根据需要使用QObject::sender()查找发件人对象,但是发出值只是更简单。

在QML中,您大多数时候最终会使用绑定(bind),绑定(bind)非常快速且强大,并且涉及到对对象的引用,而更改通知会导致引用属性的绑定(bind)表达式自动重新评估。因此,不必发出实际值。

没有什么可以阻止您拥有两全其美的选择。发出新值的通知信号似乎可以很好地与QML绑定(bind)一起使用。因此,如果出于某种原因需要发出值,请不要回避它,这不会损害QML兼容性。

09-06 14:29