diff options
author | Friedemann Kleint <[email protected]> | 2024-02-23 08:32:48 +0100 |
---|---|---|
committer | Friedemann Kleint <[email protected]> | 2024-03-01 14:36:12 +0100 |
commit | e5a973ca08e54206cd4886014ac1412782ffb265 (patch) | |
tree | fdc46d0ec40d9c2617075f02fc29948605b0859b | |
parent | 5cdc4d20858519f9f71693e254ebec56a68ce892 (diff) |
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<Qt::AlignmentFlag>").
Manifests as signal:
QBluetoothDeviceDiscoveryAgent::deviceUpdated(QBluetoothDeviceInfo, QBluetoothDeviceInfo::Fields)
Pick-to: 6.6
Fixes: PYSIDE-2613
Change-Id: I7ecce8e0b3f8ddf790c40260fc156184e83cad69
Reviewed-by: Cristian Maureira-Fredes <[email protected]>
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 78c52ee59..295945a86 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); +} + void TestObject::setQLatin1String(QLatin1String v) { m_qLatin1String = v; diff --git a/sources/pyside6/tests/pysidetest/testobject.h b/sources/pyside6/tests/pysidetest/testobject.h index 80944e14b..0d6aa9d14 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); + static constexpr auto LATIN1_TEST_FIELD = QLatin1StringView("test"); void setQLatin1String(QLatin1String v); @@ -57,6 +59,7 @@ signals: void childrenChanged(const QList<QObject*>&); 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 efb7cfba9..d5eef49fe 100644 --- a/sources/shiboken6/generator/shiboken/cppgenerator.cpp +++ b/sources/shiboken6/generator/shiboken/cppgenerator.cpp @@ -4123,7 +4123,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"; } |