aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCristián Maureira-Fredes <Cristian.Maureira-Fredes@qt.io>2022-04-07 11:00:26 +0200
committerFriedemann Kleint <Friedemann.Kleint@qt.io>2022-04-08 01:37:00 +0200
commitc85df0b37c4e91ff4d61091c06d0f75734356990 (patch)
treea17d92c05ef8a268637f24c81d26a778a32b0ff0
parentd375273ba0d6fed567a5b8cc386395b10f5f2bda (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.xml8
-rw-r--r--sources/pyside6/PySide6/glue/qtgui.cpp6
-rw-r--r--sources/pyside6/tests/QtWidgets/qaction_test.py13
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()