diff options
Diffstat (limited to 'examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties')
2 files changed, 23 insertions, 10 deletions
diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/birthdayparty.py b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/birthdayparty.py index 63e86c3e0..f38bfd305 100644 --- a/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/birthdayparty.py +++ b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/birthdayparty.py @@ -1,7 +1,7 @@ # Copyright (C) 2022 The Qt Company Ltd. # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause -from PySide6.QtCore import QDate, QObject, ClassInfo, Property +from PySide6.QtCore import QDate, QObject, ClassInfo, Property, Signal from PySide6.QtQml import QmlAnonymous, QmlAttached, QmlElement, ListProperty from person import Person @@ -15,37 +15,44 @@ QML_IMPORT_MAJOR_VERSION = 1 @QmlAnonymous class BirthdayPartyAttached(QObject): + rsvp_changed = Signal() def __init__(self, parent=None): super().__init__(parent) self._rsvp = QDate() - @Property(QDate) + @Property(QDate, notify=rsvp_changed, final=True) def rsvp(self): return self._rsvp @rsvp.setter def rsvp(self, d): - self._rsvp = d + if self._rsvp != d: + self._rsvp = d + self.rsvp_changed.emit() @QmlElement @ClassInfo(DefaultProperty="guests") @QmlAttached(BirthdayPartyAttached) class BirthdayParty(QObject): + host_changed = Signal() + guests_changed = Signal() def __init__(self, parent=None): super().__init__(parent) self._host = None self._guests = [] - @Property(Person) + @Property(Person, notify=host_changed, final=True) def host(self): return self._host @host.setter def host(self, h): - self._host = h + if self._host != h: + self._host = h + self.host_changed.emit() def guest(self, n): return self._guests[n] @@ -55,9 +62,10 @@ class BirthdayParty(QObject): def appendGuest(self, guest): self._guests.append(guest) + self.guests_changed.emit() @staticmethod def qmlAttachedProperties(self, o): return BirthdayPartyAttached(o) - guests = ListProperty(Person, appendGuest) + guests = ListProperty(Person, appendGuest, notify=guests_changed, final=True) diff --git a/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/person.py b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/person.py index 89844c87f..503aaf65e 100644 --- a/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/person.py +++ b/examples/qml/tutorials/extending-qml-advanced/advanced5-Attached-properties/person.py @@ -1,7 +1,7 @@ # Copyright (C) 2022 The Qt Company Ltd. # SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause -from PySide6.QtCore import QObject, Property +from PySide6.QtCore import QObject, Property, Signal from PySide6.QtQml import QmlAnonymous, QmlElement # To be used on the @QmlElement decorator @@ -12,20 +12,25 @@ QML_IMPORT_MAJOR_VERSION = 1 @QmlAnonymous class Person(QObject): + name_changed = Signal() + shoe_size_changed = Signal() + def __init__(self, parent=None): super().__init__(parent) self._name = '' self._shoe_size = 0 - @Property(str) + @Property(str, notify=name_changed, final=True) def name(self): return self._name @name.setter def name(self, n): - self._name = n + if self._name != n: + self._name = n + self.name_changed.emit() - @Property(int) + @Property(int, notify=shoe_size_changed, final=True) def shoe_size(self): return self._shoe_size |
