Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qwidgetplatformmenu.cpp
Go to the documentation of this file.
1// Copyright (C) 2017 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
6
7#include <QtGui/qaction.h>
8#include <QtGui/qwindow.h>
9#include <QtGui/private/qhighdpiscaling_p.h>
10#include <QtWidgets/qmenu.h>
11
13
15 : m_menu(new QMenu)
16{
18
21}
22
24{
25}
26
28{
29 return m_menu.data();
30}
31
33{
34 QWidgetPlatformMenuItem *widgetItem = qobject_cast<QWidgetPlatformMenuItem *>(item);
35 if (!widgetItem)
36 return;
37
38 QWidgetPlatformMenuItem *widgetBefore = qobject_cast<QWidgetPlatformMenuItem *>(before);
39 m_menu->insertAction(widgetBefore ? widgetBefore->action() : nullptr, widgetItem->action());
40 int index = m_items.indexOf(widgetBefore);
41 if (index < 0)
42 index = m_items.size();
43 m_items.insert(index, widgetItem);
44}
45
47{
48 QWidgetPlatformMenuItem *widgetItem = qobject_cast<QWidgetPlatformMenuItem *>(item);
49 if (!widgetItem)
50 return;
51
52 m_items.removeOne(widgetItem);
53 m_menu->removeAction(widgetItem->action());
54}
55
57{
59}
60
62{
64}
65
67{
68 m_menu->setTitle(text);
69}
70
72{
73 m_menu->setIcon(icon);
74}
75
77{
78 m_menu->menuAction()->setEnabled(enabled);
79}
80
82{
83 return m_menu->menuAction()->isEnabled();
84}
85
87{
88 m_menu->menuAction()->setVisible(visible);
89}
90
92{
93 if (width > 0)
94 m_menu->setMinimumWidth(width);
95}
96
98{
99 m_menu->setFont(font);
100}
101
103{
104 Q_UNUSED(type);
105}
106
108{
109 m_menu->createWinId();
110 QWindow *handle = m_menu->windowHandle();
112 handle->setTransientParent(const_cast<QWindow *>(window));
113
114 QPoint targetPos = targetRect.bottomLeft();
115 if (window)
116 targetPos = window->mapToGlobal(QHighDpi::fromNativeLocalPosition(targetPos, window));
117
118 const QWidgetPlatformMenuItem *widgetItem = qobject_cast<const QWidgetPlatformMenuItem *>(item);
119 m_menu->popup(targetPos, widgetItem ? widgetItem->action() : nullptr);
120}
121
123{
124 m_menu->close();
125}
126
128{
129 return m_items.value(position);
130}
131
133{
134 for (QWidgetPlatformMenuItem *item : m_items) {
135 if (item->tag() == tag)
136 return item;
137 }
138 return nullptr;
139}
140
142{
143 return new QWidgetPlatformMenuItem;
144}
145
147{
148 return new QWidgetPlatformMenu;
149}
150
152
153#include "moc_qwidgetplatformmenu_p.cpp"
void setEnabled(bool)
Definition qaction.cpp:927
void setVisible(bool)
Definition qaction.cpp:990
bool isEnabled() const
Definition qaction.cpp:971
\reentrant
Definition qfont.h:20
The QIcon class provides scalable icons in different modes and states.
Definition qicon.h:20
qsizetype size() const noexcept
Definition qlist.h:386
iterator insert(qsizetype i, parameter_type t)
Definition qlist.h:471
bool removeOne(const AT &t)
Definition qlist.h:581
T value(qsizetype i) const
Definition qlist.h:661
The QMenu class provides a menu widget for use in menu bars, context menus, and other popup menus.
Definition qmenu.h:26
void aboutToShow()
This signal is emitted just before the menu is shown to the user.
void setIcon(const QIcon &icon)
Definition qmenu.cpp:1094
void popup(const QPoint &pos, QAction *at=nullptr)
Displays the menu so that the action atAction will be at the specified global position p.
Definition qmenu.cpp:2288
void aboutToHide()
void setTitle(const QString &title)
Definition qmenu.cpp:1075
void setSeparatorsCollapsible(bool collapse)
Definition qmenu.cpp:3714
QAction * menuAction() const
Returns the action associated with this menu.
Definition qmenu.cpp:1047
\inmodule QtCore
Definition qobject.h:90
QObject * parent() const
Returns a pointer to the parent object.
Definition qobject.h:311
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
Definition qobject.cpp:2823
void setParent(QObject *parent)
Makes the object a child of parent.
Definition qobject.cpp:2142
virtual quintptr tag() const
void aboutToHide()
void aboutToShow()
\inmodule QtCore\reentrant
Definition qpoint.h:23
\inmodule QtCore\reentrant
Definition qrect.h:30
constexpr QPoint bottomLeft() const noexcept
Returns the position of the rectangle's bottom-left corner.
Definition qrect.h:229
T * data() const noexcept
Returns the value of the pointer referenced by this object.
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:127
void showPopup(const QWindow *window, const QRect &targetRect, const QPlatformMenuItem *item) override
QPlatformMenuItem * menuItemAt(int position) const override
QPlatformMenu * createSubMenu() const override
QPlatformMenuItem * menuItemForTag(quintptr tag) const override
QWidgetPlatformMenu(QObject *parent=nullptr)
void setEnabled(bool enabled) override
void setText(const QString &text) override
void setVisible(bool visible) override
bool isEnabled() const override
void insertMenuItem(QPlatformMenuItem *item, QPlatformMenuItem *before) override
void syncSeparatorsCollapsible(bool enable) override
QPlatformMenuItem * createMenuItem() const override
void syncMenuItem(QPlatformMenuItem *item) override
void setFont(const QFont &font) override
void setMenuType(MenuType type) override
void setMinimumWidth(int width) override
void setIcon(const QIcon &icon) override
void removeMenuItem(QPlatformMenuItem *item) override
void setMinimumWidth(int minw)
Definition qwidget.cpp:4119
bool close()
Closes this widget.
Definition qwidget.cpp:8608
void createWinId()
Definition qwidget.cpp:2448
void insertAction(QAction *before, QAction *action)
Inserts the action action to this widget's list of actions, before the action before.
Definition qwidget.cpp:3149
QWindow * windowHandle() const
If this is a native widget, return the associated QWindow.
Definition qwidget.cpp:2490
void setFont(const QFont &)
Definition qwidget.cpp:4674
void removeAction(QAction *action)
Removes the action action from this widget's list of actions.
Definition qwidget.cpp:3193
\inmodule QtGui
Definition qwindow.h:63
QString text
T fromNativeLocalPosition(const T &value, const C *context)
Combined button and popup list for selecting options.
AudioChannelLayoutTag tag
GLuint64 GLenum void * handle
GLuint index
[2]
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLint GLsizei width
GLenum type
GLboolean enable
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
#define Q_UNUSED(x)
size_t quintptr
Definition qtypes.h:72
QGraphicsItem * item
aWidget window() -> setWindowTitle("New Window Title")
[2]
qsizetype indexOf(const AT &t, qsizetype from=0) const noexcept
Definition qlist.h:955
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent