diff options
| author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2025-06-11 11:06:31 +0200 |
|---|---|---|
| committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2025-06-17 12:04:42 +0200 |
| commit | 4aa48368667bee64e48f7c9d6b3a935411d5f23c (patch) | |
| tree | c19be3cd8624322bcee32272f1d4d410218e6abf /sources/pyside6/tests | |
| parent | 7ae471b49d0f38d7ac1c367bcfa3378f309c6b94 (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.txt | 1 | ||||
| -rw-r--r-- | sources/pyside6/tests/QtCore/qenum_designer_test.py | 83 |
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() |
