From b5ae14d9c218db63b77e2f05d514aae0ef720095 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 23 Feb 2024 08:32:48 +0100 Subject: Fix connecting to signals with QFlags<> Additionally register the shiboken converter under the type alias name ("Qt::Alignment"), which appears in the meta method signature besides the full name ("QFlags"). Manifests as signal: QBluetoothDeviceDiscoveryAgent::deviceUpdated(QBluetoothDeviceInfo, QBluetoothDeviceInfo::Fields) Fixes: PYSIDE-2613 Change-Id: I7ecce8e0b3f8ddf790c40260fc156184e83cad69 Reviewed-by: Cristian Maureira-Fredes (cherry picked from commit e5a973ca08e54206cd4886014ac1412782ffb265) Reviewed-by: Adrian Herrmann --- .../tests/pysidetest/signalwithdefaultvalue_test.py | 14 ++++++++++++-- sources/pyside6/tests/pysidetest/testobject.cpp | 5 +++++ sources/pyside6/tests/pysidetest/testobject.h | 3 +++ sources/shiboken6/generator/shiboken/cppgenerator.cpp | 5 ++++- 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/sources/pyside6/tests/pysidetest/signalwithdefaultvalue_test.py b/sources/pyside6/tests/pysidetest/signalwithdefaultvalue_test.py index cf09b2964..744b8c503 100644 --- a/sources/pyside6/tests/pysidetest/signalwithdefaultvalue_test.py +++ b/sources/pyside6/tests/pysidetest/signalwithdefaultvalue_test.py @@ -13,7 +13,7 @@ from init_paths import init_test_paths init_test_paths(True) from testbinding import TestObject -from PySide6.QtCore import QObject, SIGNAL +from PySide6.QtCore import Qt '''Tests the behaviour of signals with default values.''' @@ -56,6 +56,17 @@ class SignalWithDefaultValueTest(unittest.TestCase): self.assertTrue(self.void_called) self.assertTrue(self.bool_called) + def testFlagsSignal(self): + test_value = Qt.AlignmentFlag.AlignLeft | Qt.AlignmentFlag.AlignBottom + + def callbackAlignmentFlags(alignment): + self.alignment_flags_called = alignment + + self.obj.flagsSignal.connect(callbackAlignmentFlags) + self.obj.emitFlagsSignal(test_value) + self.assertTrue(self.alignment_flags_called) + self.assertEqual(self.alignment_flags_called, test_value) + def testConnectOldStyleEmitVoidSignal(self): def callbackVoid(): self.void_called = True @@ -83,4 +94,3 @@ class SignalWithDefaultValueTest(unittest.TestCase): if __name__ == '__main__': unittest.main() - diff --git a/sources/pyside6/tests/pysidetest/testobject.cpp b/sources/pyside6/tests/pysidetest/testobject.cpp index 2233bad62..d2a20e7b9 100644 --- a/sources/pyside6/tests/pysidetest/testobject.cpp +++ b/sources/pyside6/tests/pysidetest/testobject.cpp @@ -30,6 +30,11 @@ void TestObject::emitSignalWithTypedefValue(int value) emit signalWithTypedefValue(TypedefValue(value)); } +void TestObject::emitFlagsSignal(Qt::Alignment alignment) +{ + emit flagsSignal(alignment); +} + QDebug operator<<(QDebug dbg, TestObject& testObject) { QDebugStateSaver saver(dbg); diff --git a/sources/pyside6/tests/pysidetest/testobject.h b/sources/pyside6/tests/pysidetest/testobject.h index d3f0b2018..6793ae08f 100644 --- a/sources/pyside6/tests/pysidetest/testobject.h +++ b/sources/pyside6/tests/pysidetest/testobject.h @@ -45,6 +45,8 @@ public: void emitSignalWithTypedefValue(int value); + void emitFlagsSignal(Qt::Alignment alignment); + signals: void idValue(int newValue); void justASignal(); @@ -52,6 +54,7 @@ signals: void childrenChanged(const QList&); void signalWithDefaultValue(bool value = false); void signalWithTypedefValue(TypedefValue value); + void flagsSignal(Qt::Alignment alignment); private: int m_idValue; diff --git a/sources/shiboken6/generator/shiboken/cppgenerator.cpp b/sources/shiboken6/generator/shiboken/cppgenerator.cpp index 1f3c68ddd..e25e28638 100644 --- a/sources/shiboken6/generator/shiboken/cppgenerator.cpp +++ b/sources/shiboken6/generator/shiboken/cppgenerator.cpp @@ -4108,7 +4108,10 @@ void CppGenerator::writeEnumConverterInitialization(TextStream &s, const Abstrac if (auto flags = enumType->flags()) s << "// Register converter for flag '" << flags->qualifiedCppName() << "'.\n" << "Shiboken::Conversions::registerConverterName(converter, \"" - << flags->name() << "\");\n"; + << flags->name() << "\");\n" // QMetaType + << "Shiboken::Conversions::registerConverterName(converter, \"" + << flags->originalName() << "\");\n"; // Signals with flags + s << outdent << "}\n"; } -- cgit v1.2.3