aboutsummaryrefslogtreecommitdiffstats
path: root/sources/pyside6/tests
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2025-06-11 11:06:31 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2025-06-17 12:04:42 +0200
commit4aa48368667bee64e48f7c9d6b3a935411d5f23c (patch)
treec19be3cd8624322bcee32272f1d4d410218e6abf /sources/pyside6/tests
parent7ae471b49d0f38d7ac1c367bcfa3378f309c6b94 (diff)
Enable using @QEnum/@QFlag-decorated enums as custom widget properties
Create a dynamic QMetaType for @QEnum-decorated enumerations so that Qt Widgets Designer is able to recognize the properties. [ChangeLog][PySide6] It is now possible to use @QEnum/@QFlag-decorated enumerations as properties of custom widgets in Qt Widgets Designer. Task-number: PYSIDE-2840 Change-Id: I58a16002f89678856b7f33d687cf99f00c6f0cc7 Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Diffstat (limited to 'sources/pyside6/tests')
-rw-r--r--sources/pyside6/tests/QtCore/CMakeLists.txt1
-rw-r--r--sources/pyside6/tests/QtCore/qenum_designer_test.py83
2 files changed, 84 insertions, 0 deletions
diff --git a/sources/pyside6/tests/QtCore/CMakeLists.txt b/sources/pyside6/tests/QtCore/CMakeLists.txt
index a74216ccc..e21e8c064 100644
--- a/sources/pyside6/tests/QtCore/CMakeLists.txt
+++ b/sources/pyside6/tests/QtCore/CMakeLists.txt
@@ -73,6 +73,7 @@ PYSIDE_TEST(qdate_test.py)
PYSIDE_TEST(qdir_test.py)
PYSIDE_TEST(qeasingcurve_test.py)
PYSIDE_TEST(qenum_test.py)
+PYSIDE_TEST(qenum_designer_test.py)
PYSIDE_TEST(qevent_test.py)
PYSIDE_TEST(qfileinfo_test.py)
PYSIDE_TEST(qfile_test.py)
diff --git a/sources/pyside6/tests/QtCore/qenum_designer_test.py b/sources/pyside6/tests/QtCore/qenum_designer_test.py
new file mode 100644
index 000000000..0f35bab16
--- /dev/null
+++ b/sources/pyside6/tests/QtCore/qenum_designer_test.py
@@ -0,0 +1,83 @@
+#!/usr/bin/python
+# Copyright (C) 2025 The Qt Company Ltd.
+# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
+
+'''Test cases for QEnum and QFlags within Qt Widgets Designer'''
+
+import os
+import sys
+import unittest
+
+from enum import Enum, Flag
+
+from pathlib import Path
+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 QObject, Property, QEnum, QFlag
+
+
+class CustomWidgetBase(QObject):
+ @QEnum
+ class TestEnum(Enum):
+ EnumValue0 = 0
+ EnumValue1 = 1
+ EnumValue2 = 2
+ EnumValue3 = 3
+
+ @QFlag
+ class TestFlag(Flag):
+ FlagValue0 = 1
+ FlagValue1 = 2
+ FlagValue2 = 4
+ FlagValue3 = 8
+
+
+class CustomWidget(CustomWidgetBase):
+ def __init__(self, parent=None):
+ super().__init__(parent)
+ self._testEnum = CustomWidget.TestEnum.EnumValue1
+ self._testFlag = (CustomWidget.TestFlag.FlagValue0
+ | CustomWidget.TestFlag.FlagValue1)
+
+ def testEnum(self):
+ return self._testEnum
+
+ def setTestEnum(self, new_val):
+ self._testEnum = new_val
+
+ def getTestFlag(self):
+ return self._testFlag
+
+ def setTestFlag(self, new_val):
+ self._testFlag = new_val
+
+ testEnum = Property(CustomWidgetBase.TestEnum, testEnum, setTestEnum)
+ testFlag = Property(CustomWidgetBase.TestFlag, getTestFlag, setTestFlag)
+
+
+class TestDesignerEnum(unittest.TestCase):
+ """PYSIDE-2840: Test whether a custom widget with decorated enum/flag properties
+ allows for modifying the values from C++."""
+
+ def testEnum(self):
+ cw = CustomWidget()
+ # Emulate Qt Widgets Designer setting a property
+ cw.setProperty("testEnum", 3)
+ self.assertEqual(cw.testEnum, CustomWidget.TestEnum.EnumValue3)
+ # Emulate uic generated code
+ cw.setProperty("testEnum", CustomWidgetBase.TestEnum.EnumValue2)
+ self.assertEqual(cw.testEnum, CustomWidget.TestEnum.EnumValue2)
+
+ # Emulate Qt Widgets Designer setting a property
+ cw.setProperty("testFlag", 12)
+ self.assertEqual(cw.testFlag, (CustomWidget.TestFlag.FlagValue2
+ | CustomWidget.TestFlag.FlagValue3))
+ # Emulate uic generated code
+ cw.setProperty("testFlag", CustomWidgetBase.TestFlag.FlagValue1)
+ self.assertEqual(cw.testFlag, CustomWidget.TestFlag.FlagValue1)
+
+
+if __name__ == '__main__':
+ unittest.main()