aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2024-02-23 08:32:48 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2024-03-01 20:25:13 +0100
commitb5ae14d9c218db63b77e2f05d514aae0ef720095 (patch)
tree23e0d5951ddb9970ace4f6f0c46e926a5b6f62a1
parent498ad471e484572e4f0a3c56774d00c201afd3cf (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) Fixes: PYSIDE-2613 Change-Id: I7ecce8e0b3f8ddf790c40260fc156184e83cad69 Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io> (cherry picked from commit e5a973ca08e54206cd4886014ac1412782ffb265) Reviewed-by: Adrian Herrmann <adrian.herrmann@qt.io>
-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 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<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 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";
}