1

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

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

  // ...

  signals:
    void somethingChanged();
}

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

4

1 回答 1

2

发出该值允许您使用该值,而无需引用它是其属性的对象。这就是通常在 C++ API 中所做的事情,这使您不必手动保留对对象的引用,以便您可以在更改通知时读取值。请注意,即使这样,您也可以QObject::sender()在必要时使用来查找发送者对象,但发出值更直接。

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

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

于 2017-03-18T05:00:37.223 回答