diff options
author | Adrian Herrmann <adrian.herrmann@qt.io> | 2022-08-17 18:54:45 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2022-08-18 19:37:36 +0000 |
commit | 082304ddf3398a2414c8d625f662399b398c1638 (patch) | |
tree | 0337ddf4164e9d2f94f3cca6bb38ff25862cf7b5 /sources | |
parent | bb61368c7cdd6c86ee3830455f136ec836bb00dd (diff) |
Fix random values in QFormLayout.getItemPosition()
In QFormLayout::getItemPosition() on the C++ side, *rolePtr is not set
if row == -1, in which case on the Python side this gets converted to a
random value outside the enum range. Fix this by setting *rolePtr to a
default value in the glue code.
Change-Id: I0c67c771ed017f14b211fa6ccf9c89706152d214
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
Reviewed-by: Christian Tismer <tismer@stackless.com>
(cherry picked from commit 5e4a830f2aa5e27e203fc0a4fc482b339d9106a4)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'sources')
-rw-r--r-- | sources/pyside6/PySide6/glue/qtwidgets.cpp | 5 | ||||
-rw-r--r-- | sources/pyside6/tests/QtWidgets/qformlayout_test.py | 33 |
2 files changed, 20 insertions, 18 deletions
diff --git a/sources/pyside6/PySide6/glue/qtwidgets.cpp b/sources/pyside6/PySide6/glue/qtwidgets.cpp index b355f41cb..f95db9ee5 100644 --- a/sources/pyside6/PySide6/glue/qtwidgets.cpp +++ b/sources/pyside6/PySide6/glue/qtwidgets.cpp @@ -96,6 +96,11 @@ QFormLayout::ItemRole _role; %CPPSELF->%FUNCTION_NAME(%ARGUMENT_NAMES, &_row, &_role); %PYARG_0 = PyTuple_New(2); PyTuple_SET_ITEM(%PYARG_0, 0, %CONVERTTOPYTHON[int](_row)); +// On the C++ side, *rolePtr is not set if row == -1, in which case on +// the Python side this gets converted to a random value outside the +// enum range. Fix this by setting _role to a default value here. +if (_row == -1) + _role = QFormLayout::LabelRole; PyTuple_SET_ITEM(%PYARG_0, 1, %CONVERTTOPYTHON[QFormLayout::ItemRole](_role)); // @snippet qformlayout-fix-args diff --git a/sources/pyside6/tests/QtWidgets/qformlayout_test.py b/sources/pyside6/tests/QtWidgets/qformlayout_test.py index 8760a3a9b..7cd59b63f 100644 --- a/sources/pyside6/tests/QtWidgets/qformlayout_test.py +++ b/sources/pyside6/tests/QtWidgets/qformlayout_test.py @@ -44,12 +44,11 @@ class QFormLayoutTest(UsesQApplication): def testGetItemPosition(self): formlayout = QFormLayout() - if not sys.pyside63_option_python_enum: - # PYSIDE-1735: This gives random values if no row exists. - row, role = formlayout.getItemPosition(0) - self.assertTrue(isinstance(row, int)) - self.assertTrue(isinstance(role, QFormLayout.ItemRole)) - self.assertEqual(row, -1) + + row, role = formlayout.getItemPosition(0) + self.assertTrue(isinstance(row, int)) + self.assertTrue(isinstance(role, QFormLayout.ItemRole)) + self.assertEqual(row, -1) widget = QWidget() formlayout.addRow(widget) @@ -62,12 +61,11 @@ class QFormLayoutTest(UsesQApplication): def testGetWidgetPosition(self): formlayout = QFormLayout() widget = QWidget() - if not sys.pyside63_option_python_enum: - # PYSIDE-1735: This gives random values if no row exists. - row, role = formlayout.getWidgetPosition(widget) - self.assertTrue(isinstance(row, int)) - self.assertTrue(isinstance(role, QFormLayout.ItemRole)) - self.assertEqual(row, -1) + + row, role = formlayout.getWidgetPosition(widget) + self.assertTrue(isinstance(row, int)) + self.assertTrue(isinstance(role, QFormLayout.ItemRole)) + self.assertEqual(row, -1) formlayout.addRow(widget) row, role = formlayout.getWidgetPosition(widget) @@ -79,12 +77,11 @@ class QFormLayoutTest(UsesQApplication): def testGetLayoutPosition(self): formlayout = QFormLayout() layout = QFormLayout() - if not sys.pyside63_option_python_enum: - # PYSIDE-1735: This gives random values if no row exists. - row, role = formlayout.getLayoutPosition(layout) - self.assertTrue(isinstance(row, int)) - self.assertTrue(isinstance(role, QFormLayout.ItemRole)) - self.assertEqual(row, -1) + + row, role = formlayout.getLayoutPosition(layout) + self.assertTrue(isinstance(row, int)) + self.assertTrue(isinstance(role, QFormLayout.ItemRole)) + self.assertEqual(row, -1) formlayout.addRow(layout) row, role = formlayout.getLayoutPosition(layout) |