Details
-
Bug
-
Resolution: Out of scope
-
Not Evaluated
-
None
-
6.2.9
-
None
Description
The following code gives unexpected results
import signal import sys from PySide6.QtCore import QCoreApplication, Property, QObject, Signal, Slot class Base(QObject): iChanged = Signal(int) def __init__(self, i, parent=None): super().__init__(parent) self._i = i def getI(self): return self._i def setI(self, i): if self._i != I: self._i = i self.iChanged.emit(i) i = Property(int, getI, setI, notify = iChanged) class Derived(Base): def__init__(self, i, parent=None): super().__init__(i, parent) def getI(self): return 2 * self._i # i = Property(int, getI) # Try with and without umcommenting... @Slot(int) def testBase(i): print(f'Base slot called with i = {i}') @Slot(int) def testDerived(i): print(f'Derived slot called with i = {i}') if __name__ == '__main__': app = QCoreApplication(sys.argv) base = Base(2) derived = Derived(2) print(f'base.i = {base.i}/{base.getI()}') print(f'derived.i = {derived.i}/{derived.getI()}') base.iChanged.connect(testBase) derived.iChanged.connect(testDerived) base.setI(4) derived.setI(5) print(f'derived.i = {derived.i}/{derived.getI()}') signal.signal(signal.SIGINT, signal.SIG_DFL) sys.exit(app.exec())
The results, without declaring a 2nd Property in Derived, are:
base.i = 2/2
derived.i = 2/4
Base slot called with i = 4
Derived slot called with i = 5
derived.i = 5/10
Note that the Property getter calls the getI method of Base, not Derived. If the redundant Property is declared in Derived, it fixes the derived instance so derived.i and derived.getI() give the same values, but doesn't seem like creating duplicate Properties is a good idea.
Attachments
Issue Links
- relates to
-
PYSIDE-1564 QObject does not support cooperative multiple inheritance
- Closed
-
PYSIDE-1434 can't use ABC with Pyside2
- Closed
-
PYSIDE-862 Add support for Qt Remote Objects
- Open