Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
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
4
#
include
"qwidgetplatformmenu_p.h"
5
#
include
"qwidgetplatformmenuitem_p.h"
6
7
#
include
<
QtGui
/
qaction
.
h
>
8
#
include
<
QtGui
/
qwindow
.
h
>
9
#
include
<
QtGui
/
private
/
qhighdpiscaling_p
.
h
>
10
#
include
<
QtWidgets
/
qmenu
.
h
>
11
12
QT_BEGIN_NAMESPACE
13
14
QWidgetPlatformMenu
::
QWidgetPlatformMenu
(
QObject
*
parent
)
15
: m_menu(
new
QMenu)
16
{
17
setParent(parent);
18
19
connect(m_menu.data(), &QMenu::aboutToShow,
this
, &QPlatformMenu::aboutToShow);
20
connect(m_menu.data(), &QMenu::aboutToHide,
this
, &QPlatformMenu::aboutToHide);
21
}
22
23
QWidgetPlatformMenu
::~
QWidgetPlatformMenu
()
24
{
25
}
26
27
QMenu *
QWidgetPlatformMenu
::
menu
()
const
28
{
29
return
m_menu.data();
30
}
31
32
void
QWidgetPlatformMenu
::
insertMenuItem
(QPlatformMenuItem *item, QPlatformMenuItem *before)
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
46
void
QWidgetPlatformMenu
::
removeMenuItem
(QPlatformMenuItem *item)
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
56
void
QWidgetPlatformMenu
::
syncMenuItem
(QPlatformMenuItem *item)
57
{
58
Q_UNUSED(item);
59
}
60
61
void
QWidgetPlatformMenu
::
syncSeparatorsCollapsible
(
bool
enable)
62
{
63
m_menu->setSeparatorsCollapsible(enable);
64
}
65
66
void
QWidgetPlatformMenu
::
setText
(
const
QString &text)
67
{
68
m_menu->setTitle(text);
69
}
70
71
void
QWidgetPlatformMenu
::
setIcon
(
const
QIcon &icon)
72
{
73
m_menu->setIcon(icon);
74
}
75
76
void
QWidgetPlatformMenu
::
setEnabled
(
bool
enabled)
77
{
78
m_menu->menuAction()->setEnabled(enabled);
79
}
80
81
bool
QWidgetPlatformMenu
::
isEnabled
()
const
82
{
83
return
m_menu->menuAction()->isEnabled();
84
}
85
86
void
QWidgetPlatformMenu
::
setVisible
(
bool
visible)
87
{
88
m_menu->menuAction()->setVisible(visible);
89
}
90
91
void
QWidgetPlatformMenu
::
setMinimumWidth
(
int
width)
92
{
93
if
(width > 0)
94
m_menu->setMinimumWidth(width);
95
}
96
97
void
QWidgetPlatformMenu
::
setFont
(
const
QFont &font)
98
{
99
m_menu->setFont(font);
100
}
101
102
void
QWidgetPlatformMenu
::
setMenuType
(MenuType type)
103
{
104
Q_UNUSED(type);
105
}
106
107
void
QWidgetPlatformMenu
::
showPopup
(
const
QWindow *window,
const
QRect &targetRect,
const
QPlatformMenuItem *item)
108
{
109
m_menu->createWinId();
110
QWindow *handle = m_menu->windowHandle();
111
Q_ASSERT(handle);
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
122
void
QWidgetPlatformMenu
::
dismiss
()
123
{
124
m_menu->close();
125
}
126
127
QPlatformMenuItem
*
QWidgetPlatformMenu
::
menuItemAt
(
int
position)
const
128
{
129
return
m_items.value(position);
130
}
131
132
QPlatformMenuItem
*
QWidgetPlatformMenu
::
menuItemForTag
(quintptr tag)
const
133
{
134
for
(QWidgetPlatformMenuItem *item : m_items) {
135
if
(item->tag() == tag)
136
return
item;
137
}
138
return
nullptr
;
139
}
140
141
QPlatformMenuItem
*
QWidgetPlatformMenu
::
createMenuItem
()
const
142
{
143
return
new
QWidgetPlatformMenuItem
;
144
}
145
146
QPlatformMenu
*
QWidgetPlatformMenu
::
createSubMenu
()
const
147
{
148
return
new
QWidgetPlatformMenu
;
149
}
150
151
QT_END_NAMESPACE
152
153
#
include
"moc_qwidgetplatformmenu_p.cpp"
QObject
\inmodule QtCore
Definition
qobject.h:105
QWidgetPlatformMenuItem
Definition
qwidgetplatformmenuitem_p.h:26
QWidgetPlatformMenu
Definition
qwidgetplatformmenu_p.h:27
QWidgetPlatformMenu::dismiss
void dismiss() override
Definition
qwidgetplatformmenu.cpp:122
QWidgetPlatformMenu::showPopup
void showPopup(const QWindow *window, const QRect &targetRect, const QPlatformMenuItem *item) override
Definition
qwidgetplatformmenu.cpp:107
QWidgetPlatformMenu::menuItemAt
QPlatformMenuItem * menuItemAt(int position) const override
Definition
qwidgetplatformmenu.cpp:127
QWidgetPlatformMenu::createSubMenu
QPlatformMenu * createSubMenu() const override
Definition
qwidgetplatformmenu.cpp:146
QWidgetPlatformMenu::menuItemForTag
QPlatformMenuItem * menuItemForTag(quintptr tag) const override
Definition
qwidgetplatformmenu.cpp:132
QWidgetPlatformMenu::setEnabled
void setEnabled(bool enabled) override
Definition
qwidgetplatformmenu.cpp:76
QWidgetPlatformMenu::menu
QMenu * menu() const
Definition
qwidgetplatformmenu.cpp:27
QWidgetPlatformMenu::setText
void setText(const QString &text) override
Definition
qwidgetplatformmenu.cpp:66
QWidgetPlatformMenu::setVisible
void setVisible(bool visible) override
Definition
qwidgetplatformmenu.cpp:86
QWidgetPlatformMenu::isEnabled
bool isEnabled() const override
Definition
qwidgetplatformmenu.cpp:81
QWidgetPlatformMenu::insertMenuItem
void insertMenuItem(QPlatformMenuItem *item, QPlatformMenuItem *before) override
Definition
qwidgetplatformmenu.cpp:32
QWidgetPlatformMenu::syncSeparatorsCollapsible
void syncSeparatorsCollapsible(bool enable) override
Definition
qwidgetplatformmenu.cpp:61
QWidgetPlatformMenu::createMenuItem
QPlatformMenuItem * createMenuItem() const override
Definition
qwidgetplatformmenu.cpp:141
QWidgetPlatformMenu::syncMenuItem
void syncMenuItem(QPlatformMenuItem *item) override
Definition
qwidgetplatformmenu.cpp:56
QWidgetPlatformMenu::~QWidgetPlatformMenu
~QWidgetPlatformMenu()
Definition
qwidgetplatformmenu.cpp:23
QWidgetPlatformMenu::setFont
void setFont(const QFont &font) override
Definition
qwidgetplatformmenu.cpp:97
QWidgetPlatformMenu::setMenuType
void setMenuType(MenuType type) override
Definition
qwidgetplatformmenu.cpp:102
QWidgetPlatformMenu::setMinimumWidth
void setMinimumWidth(int width) override
Definition
qwidgetplatformmenu.cpp:91
QWidgetPlatformMenu::setIcon
void setIcon(const QIcon &icon) override
Definition
qwidgetplatformmenu.cpp:71
QWidgetPlatformMenu::removeMenuItem
void removeMenuItem(QPlatformMenuItem *item) override
Definition
qwidgetplatformmenu.cpp:46
QPlatformGraphicsBufferHelper
\inmodule QtGui
qtdeclarative
src
labs
platform
widgets
qwidgetplatformmenu.cpp
Generated on
for Qt by
1.14.0