aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <[email protected]>2024-02-23 08:32:48 +0100
committerFriedemann Kleint <[email protected]>2024-03-01 14:36:12 +0100
commite5a973ca08e54206cd4886014ac1412782ffb265 (patch)
treefdc46d0ec40d9c2617075f02fc29948605b0859b
parent5cdc4d20858519f9f71693e254ebec56a68ce892 (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]>
-rw-r--r--sources/pyside6/tests/pysidetest/signalwithdefaultvalue_test.py14
-rw-r--r--sources/pyside6/tests/pysidetest/testobject.cpp5
-rw-r--r--sources/pyside6/tests/pysidetest/testobject.h3
-rw-r--r--sources/shiboken6/generator/shiboken/cppgenerator.cpp5
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";
}