From 51636b43d90bc29996f3bbd8372f333eb1a321d0 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 24 Nov 2023 17:31:10 +0100 Subject: Enable connecting signals to slots with default parameters Find the number of default parameters using PyFunction_GetDefaults() and change the argCount() helper to return the min/max argument count. With that, try to match the slot using the most argument. [ChangeLog][PySide6] It is now possible to connect signals to slots/lambdas with more arguments provided they have default parameters. Fixes: PYSIDE-2524 Change-Id: I134d33e3ee78b62689fa36887a9acd41951c02e1 Reviewed-by: Qt CI Bot Reviewed-by: Shyamnath Premnadh --- sources/pyside6/tests/signals/self_connect_test.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'sources/pyside6/tests/signals/self_connect_test.py') diff --git a/sources/pyside6/tests/signals/self_connect_test.py b/sources/pyside6/tests/signals/self_connect_test.py index d6c03db18..feb966d27 100644 --- a/sources/pyside6/tests/signals/self_connect_test.py +++ b/sources/pyside6/tests/signals/self_connect_test.py @@ -15,10 +15,21 @@ init_test_paths(False) from PySide6.QtCore import QObject, SIGNAL, SLOT from PySide6.QtWidgets import QPushButton, QWidget +from PySide6.QtCore import QObject, Slot from helper.usesqapplication import UsesQApplication +class Receiver(QObject): + def __init__(self, p=None): + super().__init__(p) + self.triggered = False + + @Slot(bool,int) + def default_parameter_slot(self, bool_value, int_value=0): + self.triggered = True + + class SelfConnect(UsesQApplication): def testButtonClickClose(self): @@ -40,6 +51,15 @@ class SelfConnect(UsesQApplication): button.click() self.assertTrue(not window.isVisible()) + def testDefaultParameters(self): + button = QPushButton() + receiver = Receiver(button) + button.clicked.connect(receiver.default_parameter_slot) + button.clicked.connect(button.close) + button.show() + button.click() + self.assertTrue(receiver.triggered) + if __name__ == '__main__': unittest.main() -- cgit v1.2.3