Предположим, у меня есть класс, который выглядит так:
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 в большинстве случаев вы используете привязки, которые являются очень быстрыми и мощными и включают ссылки на объекты, а уведомления об изменениях заставляют выражения привязки, которые ссылаются на свойства, автоматически переоценивать. Таким образом, нет необходимости выделять фактическое значение.
Ничто не мешает вам иметь лучшее из обоих миров. Сигнал уведомления, который испускает новое значение, кажется, прекрасно работает с привязками QML. Так что если по какой-то причине вы необходимость для вывода значения не стесняйтесь, это не поставит под угрозу совместимость с QML.
Других решений пока нет …