aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/tests/QtCore/qmetaobject_test.py
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2022-02-21 13:56:10 +0100
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2022-02-28 16:27:50 +0100
commit9ef3c0041c489bd9f939c45a571026c3e2227685 (patch)
treea0914206cef4ea870443f0da485a0b0229e07715 /sources/pyside6/tests/QtCore/qmetaobject_test.py
parent328726e125bb9102e6081dc283886ac02b8c4f69 (diff)
Fix signals/slots with non-QObject object types
Add meta type registrations for pointer types. Pick-to: 6.2 Fixes: PYSIDE-1827 Change-Id: I771ab6d2c075ec1cb7d9153bc7a8ddc47642dc83 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources/pyside6/tests/QtCore/qmetaobject_test.py')
-rw-r--r--sources/pyside6/tests/QtCore/qmetaobject_test.py37
1 files changed, 36 insertions, 1 deletions
diff --git a/sources/pyside6/tests/QtCore/qmetaobject_test.py b/sources/pyside6/tests/QtCore/qmetaobject_test.py
index 33c35595f..a65a9937d 100644
--- a/sources/pyside6/tests/QtCore/qmetaobject_test.py
+++ b/sources/pyside6/tests/QtCore/qmetaobject_test.py
@@ -40,7 +40,8 @@ sys.path.append(os.fspath(Path(__file__).resolve().parents[1]))
from init_paths import init_test_paths
init_test_paths(False)
-from PySide6.QtCore import QFile, QObject, QTimer, SIGNAL
+from PySide6.QtCore import (QCoreApplication, QFile, QObject, QTimer,
+ QSemaphore, Qt, Signal, Slot, SIGNAL)
class Foo(QFile):
@@ -52,6 +53,28 @@ class DynObject(QObject):
pass
+class SemaphoreSender(QObject):
+ signal = Signal(QSemaphore)
+
+ def __init__(self, parent=None):
+ super().__init__(parent)
+ self.semaphore = QSemaphore()
+
+ def emitSignal(self):
+ self.signal.emit(self.semaphore)
+
+
+class SemaphoreReceiver(QObject):
+
+ def __init__(self, parent=None):
+ super().__init__(parent)
+ self.semaphore = None
+
+ @Slot(QSemaphore)
+ def receiverSlot(self, semaphore):
+ self.semaphore = semaphore
+
+
class qmetaobject_test(unittest.TestCase):
"""
def test_QMetaObject(self):
@@ -95,6 +118,18 @@ class qmetaobject_test(unittest.TestCase):
self.assertEqual(timer.metaObject().superClass().className(),
"QObject")
+ # PYSIDE-1827, slots with non-QObject object types should work
+ # (metatypes are registered)
+ def test_ObjectSlotSignal(self):
+ app = QCoreApplication()
+ sender = SemaphoreSender()
+ receiver = SemaphoreReceiver()
+ sender.signal.connect(receiver.receiverSlot, Qt.QueuedConnection)
+ sender.emitSignal()
+ while not receiver.semaphore:
+ QCoreApplication.processEvents()
+ self.assertEqual(sender.semaphore, receiver.semaphore)
+
if __name__ == '__main__':
unittest.main()