diff options
author | Cristián Maureira-Fredes <Cristian.Maureira-Fredes@qt.io> | 2022-04-07 11:00:26 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2022-04-08 01:37:00 +0200 |
commit | c85df0b37c4e91ff4d61091c06d0f75734356990 (patch) | |
tree | a17d92c05ef8a268637f24c81d26a778a32b0ff0 | |
parent | d375273ba0d6fed567a5b8cc386395b10f5f2bda (diff) |
QAction: Add setMenu() and menu()
After the changes in Qt6 related to moving QAction completely to
QtGui, the 'on-demand' functions associated to QMenu were not properly
exposed.
This patch manually adds setMenu()/menu() using QObject's.
A simple test case was added.
[ChangeLog] QAction.setMenu() and QAction.menu() were implemented.
Done-with: Friedemann Kleint <Friedemann.Kleint@qt.io>
Pick-to: 6.2
Fixes: PYSIDE-1627
Change-Id: Ib8102a9cf513ee2e13ff71751b1167ca0146af31
Reviewed-by: Shyamnath Premnadh <Shyamnath.Premnadh@qt.io>
Reviewed-by: Cristian Maureira-Fredes <cristian.maureira-fredes@qt.io>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
-rw-r--r-- | sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml | 8 | ||||
-rw-r--r-- | sources/pyside6/PySide6/glue/qtgui.cpp | 6 | ||||
-rw-r--r-- | sources/pyside6/tests/QtWidgets/qaction_test.py | 13 |
3 files changed, 24 insertions, 3 deletions
diff --git a/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml b/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml index 6010af37f..82bc2918e 100644 --- a/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml +++ b/sources/pyside6/PySide6/QtGui/typesystem_gui_common.xml @@ -227,11 +227,15 @@ <enum-type name="ActionEvent"/> <enum-type name="MenuRole"/> <enum-type name="Priority" since="4.6"/> - <modify-function signature="setMenu(QMenu*)"> + <!-- PYSIDE-1627 QAction::menu()/setMenu() are templates --> + <add-function signature="menu()const" return-type="QObject*"> + <inject-code file="../glue/qtgui.cpp" snippet="qaction-menu"/> + </add-function> + <declare-function signature="setMenu(QObject*)"> <modify-argument index="1"> <parent index="this" action="add"/> </modify-argument> - </modify-function> + </declare-function> <modify-function signature="triggered(bool)" allow-thread="yes"/> <add-function signature="setShortcut(Qt::Key)"> <inject-code file="../glue/qtgui.cpp" snippet="set-qtkey-shortcut"/> diff --git a/sources/pyside6/PySide6/glue/qtgui.cpp b/sources/pyside6/PySide6/glue/qtgui.cpp index b312180b7..8cfdd69a3 100644 --- a/sources/pyside6/PySide6/glue/qtgui.cpp +++ b/sources/pyside6/PySide6/glue/qtgui.cpp @@ -136,6 +136,12 @@ QAccessibleInterface *PySideAccessibleFactory::callFactories(const QString &key, PySideAccessibleFactory::ensureInstance()->installFactory(%1); // @snippet qaccessible-installfactory +// @snippet qaction-menu +// %CPPSELF->menu(); // pretend it was called. +QObject *object = %CPPSELF->menu<QObject *>(); +%PYARG_0 = %CONVERTTOPYTHON[QObject*](object); +// @snippet qaction-menu + // @snippet glgetshadersource GLsizei bufSize = 4096; GLsizei length = bufSize - 1; diff --git a/sources/pyside6/tests/QtWidgets/qaction_test.py b/sources/pyside6/tests/QtWidgets/qaction_test.py index 6f9b1afec..26d3e65e6 100644 --- a/sources/pyside6/tests/QtWidgets/qaction_test.py +++ b/sources/pyside6/tests/QtWidgets/qaction_test.py @@ -36,7 +36,7 @@ from init_paths import init_test_paths init_test_paths(False) from PySide6.QtGui import QAction -from PySide6.QtWidgets import QWidget +from PySide6.QtWidgets import QWidget, QMenu from helper.usesqapplication import UsesQApplication @@ -73,6 +73,17 @@ class SetShortcutTest(UsesQApplication): s2 = action.shortcut() self.assertEqual(s2, shortcut) + def testMenu(self): + # Test the setMenu()/menu() old functionality removed in Qt6 + # that was added via helper functions. + menu = QMenu("menu") + action = QAction("action") + + # Using QAction::setMenu(QObject*) + action.setMenu(menu) + + self.assertEqual(action.menu(), menu) + if __name__ == '__main__': unittest.main() |