假设我有一个看起来像这样的课:
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兼容性。