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
qmenu_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 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// Qt-Security score:significant reason:default
4
5#ifndef QMENU_P_H
6#define QMENU_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtWidgets/private/qtwidgetsglobal_p.h>
20#include "QtWidgets/qmenu.h"
21#if QT_CONFIG(menubar)
22#include "QtWidgets/qmenubar.h"
23#endif
24#include "QtWidgets/qstyleoption.h"
25#include "QtCore/qdatetime.h"
26#include "QtCore/qmap.h"
27#include "QtCore/qhash.h"
28#include "QtCore/qbasictimer.h"
29#include "private/qwidget_p.h"
30
31#include <qpa/qplatformmenu.h>
32
33#include <QtCore/qpointer.h>
34
35#include <functional>
36
38
40
41static inline int pick(Qt::Orientation o, const QPoint &pos)
42{ return o == Qt::Horizontal ? pos.x() : pos.y(); }
43
44static inline int pick(Qt::Orientation o, const QSize &size)
45{ return o == Qt::Horizontal ? size.width() : size.height(); }
46
47static inline int &rpick(Qt::Orientation o, QPoint &pos)
48{ return o == Qt::Horizontal ? pos.rx() : pos.ry(); }
49
50static inline int &rpick(Qt::Orientation o, QSize &size)
51{ return o == Qt::Horizontal ? size.rwidth() : size.rheight(); }
52
53static inline QSizePolicy::Policy pick(Qt::Orientation o, const QSizePolicy &policy)
54{ return o == Qt::Horizontal ? policy.horizontalPolicy() : policy.verticalPolicy(); }
55
56static inline int perp(Qt::Orientation o, const QPoint &pos)
57{ return o == Qt::Vertical ? pos.x() : pos.y(); }
58
59static inline int perp(Qt::Orientation o, const QSize &size)
60{ return o == Qt::Vertical ? size.width() : size.height(); }
61
62static inline int &rperp(Qt::Orientation o, QPoint &pos)
63{ return o == Qt::Vertical ? pos.rx() : pos.ry(); }
64
65static inline int &rperp(Qt::Orientation o, QSize &size)
66{ return o == Qt::Vertical ? size.rwidth() : size.rheight(); }
67
68static inline int pick(Qt::Orientation o, const QMargins &m)
69{ return o == Qt::Horizontal ? (m.left() + m.right()) : (m.top() + m.bottom()); }
70
71static inline int perp(Qt::Orientation o, const QMargins &m)
72{ return o == Qt::Vertical ? (m.left() + m.right()) : (m.top() + m.bottom()); }
73
74class QTornOffMenu;
75class QEventLoop;
76
77template <typename T>
79{
80public:
81 QSetValueOnDestroy(T &toSet, T value)
82 : toSet(toSet)
83 , value(value)
84 { }
85
86 ~QSetValueOnDestroy() { toSet = value; }
87private:
88 T &toSet;
89 T value;
90};
91
93{
95public:
97 : m_enabled(false)
98 , m_uni_directional(false)
100 , m_use_reset_action(true)
101 { }
102
104
117
118 void reset();
119 bool enabled() const { return m_enabled; }
120
126
128 {
129 if (m_enabled)
130 m_time.start(m_timeout, m_menu);
131 }
132
134 {
135 if (!m_time.isActive())
137 }
138
140 {
141 m_time.stop();
142 }
143
144 void enter();
145 void childEnter();
146
147 void leave();
148 void childLeave();
149
150 static qreal slope(const QPointF &p1, const QPointF &p2)
151 {
152 const QPointF slope = p2 - p1;
153 if (qFuzzyIsNull(slope.x()))
154 return 9999;
155 return slope.y() / slope.x();
156 }
157
158 bool checkSlope(qreal oldS, qreal newS, bool wantSteeper)
159 {
160 if (wantSteeper)
161 return oldS <= newS;
162 return newS <= oldS;
163 }
164
165 MouseEventResult processMouseEvent(const QPointF &mousePos, QAction *resetAction, QAction *currentAction)
166 {
167 if (m_parent)
168 m_parent->stopTimer();
169
170 if (!m_enabled)
172
174
175 if (!m_sub_menu) {
176 reset();
178 }
179
180 QSetValueOnDestroy<bool> setFirstMouse(m_first_mouse, false);
181 QSetValueOnDestroy<QPointF> setPreviousPoint(m_previous_point, mousePos);
182
183 if (resetAction && resetAction->isSeparator()) {
184 m_reset_action = nullptr;
185 m_use_reset_action = true;
186 } else if (m_reset_action != resetAction) {
187 if (m_use_reset_action && resetAction) {
188 const QList<QAction *> actions = m_menu->actions();
189 const int resetIdx = actions.indexOf(resetAction);
190 const int originIdx = actions.indexOf(m_origin_action);
191 if (resetIdx > -1 && originIdx > -1 && qAbs(resetIdx - originIdx) > 1)
192 m_use_reset_action = false;
193 }
194 m_reset_action = resetAction;
195 }
196
197 if (m_action_rect.contains(mousePos)) {
199 return currentAction == m_menu->menuAction() ? EventIsProcessed : EventShouldBePropagated;
200 }
201
202 if (m_uni_directional && !m_first_mouse && resetAction != m_origin_action) {
203 bool left_to_right = m_menu->layoutDirection() == Qt::LeftToRight;
204 QRect sub_menu_rect = m_sub_menu->geometry();
205 QPoint sub_menu_top =
206 left_to_right? sub_menu_rect.topLeft() : sub_menu_rect.topRight();
207 QPoint sub_menu_bottom =
208 left_to_right? sub_menu_rect.bottomLeft() : sub_menu_rect.bottomRight();
209 qreal prev_slope_top = slope(m_previous_point, sub_menu_top);
210 qreal prev_slope_bottom = slope(m_previous_point, sub_menu_bottom);
211
212 qreal current_slope_top = slope(mousePos, sub_menu_top);
213 qreal current_slope_bottom = slope(mousePos, sub_menu_bottom);
214
215 bool slopeTop = checkSlope(prev_slope_top, current_slope_top, sub_menu_top.y() < mousePos.y());
216 bool slopeBottom = checkSlope(prev_slope_bottom, current_slope_bottom, sub_menu_bottom.y() > mousePos.y());
217 bool rightDirection = false;
218 int mouseDir = int(m_previous_point.y() - mousePos.y());
219 if (mouseDir >= 0) {
220 rightDirection = rightDirection || slopeTop;
221 }
222 if (mouseDir <= 0) {
223 rightDirection = rightDirection || slopeBottom;
224 }
225
226 if (m_uni_dir_discarded_count >= m_uni_dir_fail_at_count && !rightDirection) {
227 m_uni_dir_discarded_count = 0;
229 }
230
231 if (!rightDirection)
232 m_uni_dir_discarded_count++;
233 else
234 m_uni_dir_discarded_count = 0;
235
236 }
237
238 return m_select_other_actions ? EventShouldBePropagated : EventIsProcessed;
239 }
240
241 void setSubMenuPopup(const QRect &actionRect, QAction *resetAction, QMenu *subMenu);
242 bool hasParentActiveDelayTimer() const;
243 void timeout();
244 int timeForTimeout() const { return m_timeout; }
245
246 bool isTimerId(int timerId) const { return m_time.timerId() == timerId; }
247 QMenu *subMenu() const { return m_sub_menu; }
248
249private:
250 QMenu *m_menu = nullptr;
251 QAction *m_reset_action = nullptr;
252 QAction *m_origin_action = nullptr;
253 QRectF m_action_rect;
254 QPointF m_previous_point;
255 QPointer<QMenu> m_sub_menu;
256 QMenuSloppyState *m_parent = nullptr;
257 QBasicTimer m_time;
258 short m_uni_dir_discarded_count = 0;
259 short m_uni_dir_fail_at_count = 0;
260 short m_timeout = 0;
261 bool m_init_guard = false;
262 bool m_first_mouse = true;
263
264 bool m_enabled : 1;
265 bool m_uni_directional : 1;
266 bool m_select_other_actions : 1;
267 bool m_discard_state_when_entering_parent : 1;
268 bool m_dont_start_time_on_leave : 1;
269 bool m_use_reset_action : 1;
270};
271
273{
274 Q_DECLARE_PUBLIC(QMenu)
275public:
277
279 itemsDirty(false),
280 hasCheckableItems(false),
281 lastContextMenu(false),
283 toolTipsVisible(false),
284 delayedPopupGuard(false),
285 hasReceievedEnter(false),
286 hasHadMouse(false),
287 aboutToHide(false),
288 tearoff(false),
289 tornoff(false),
290 tearoffHighlighted(false),
291 doChildEffects(false)
292 { }
293
295 {
296 delete scroll;
297 if (!platformMenu.isNull() && !platformMenu->parent())
298 delete platformMenu.data();
299 }
300 void init();
302 void setPlatformMenu(QPlatformMenu *menu);
303 void syncPlatformMenu();
304 void copyActionToPlatformItem(const QAction *action, QPlatformMenuItem *item);
305 QPlatformMenuItem *insertActionInPlatformMenu(const QAction *action, QPlatformMenuItem *beforeItem);
306
307#ifdef Q_OS_MACOS
309#endif
310
311 static QMenuPrivate *get(QMenu *m) { return m->d_func(); }
312 int scrollerHeight() const;
313
314 bool isContextMenu() const;
315
316 //item calculations
317 QRect actionRect(QAction *) const;
318
321 void updateActionRects() const;
322 void updateActionRects(const QRect &screen) const;
323 QRect popupGeometry(QScreen *screen = nullptr) const;
324 bool useFullScreenForPopup() const;
325 int getLastVisibleAction() const;
326 void popup(const QPoint &p, QAction *atAction, PositionFunction positionFunction = {});
327 QAction *exec(const QPoint &p, QAction *action, PositionFunction positionFunction = {});
328
329 //selection
330 static QMenu *mouseDown;
332
334#ifdef QT_KEYPAD_NAVIGATION
335 QAction *selectAction = nullptr;
336 QAction *cancelAction = nullptr;
337#endif
338 struct DelayState {
340 { }
341 void initialize(QMenu *parent)
342 {
343 this->parent = parent;
344 }
345
346 void start(int timeout, QAction *toStartAction)
347 {
348 if (timer.isActive() && toStartAction == action)
349 return;
350 action = toStartAction;
351 timer.start(timeout,parent);
352 }
353 void stop()
354 {
355 action = nullptr;
356 timer.stop();
357 }
358
359 QMenu *parent = nullptr;
360 QAction *action = nullptr;
362 } delayState;
370 };
371 QWidget *topCausedWidget() const;
372 QAction *actionAt(QPoint p) const;
374 void setCurrentAction(QAction *, int popup = -1, SelectionReason reason = SelectedFromElsewhere,
376 bool activateFirst = false);
377 void popupAction(QAction *, int, bool);
378 void setSyncAction();
379
380 //scrolling support
392 void scrollMenu(QMenuScroller::ScrollLocation location, bool active=false);
393 void scrollMenu(QMenuScroller::ScrollDirection direction, bool page=false, bool active=false);
394 void scrollMenu(QAction *action, QMenuScroller::ScrollLocation location, bool active=false);
395
396 //synchronous operation (ie exec())
397 QEventLoop *eventLoop = nullptr;
399
400 //search buffer
403
404 //passing of mouse events up the parent hierarchy
406 bool mouseEventTaken(QMouseEvent *);
407
408 //used to walk up the popup list
413 virtual QList<QPointer<QWidget>> calcCausedStack() const;
415 void hideUpToMenuBar();
416 void hideMenu(QMenu *menu);
418
419 //index mappings
420 inline QAction *actionAt(int i) const { return q_func()->actions().at(i); }
421 inline int indexOf(QAction *act) const { return q_func()->actions().indexOf(act); }
422
423 //tear off support
425
427
428 //default action
430
431 QAction *menuAction = nullptr;
433
434 void setOverrideMenuAction(QAction *);
436
437 //firing of events
438 void activateAction(QAction *, QAction::ActionEvent, bool self=true);
439 void activateCausedStack(const QList<QPointer<QWidget>> &, QAction *, QAction::ActionEvent,
440 bool);
441
442 void _q_actionTriggered();
443 void _q_actionHovered();
445
446 bool hasMouseMoved(const QPoint &globalPos);
447
449
451
453
455
457 public:
459 ScrollerTearOffItem(Type type, QMenuPrivate *mPrivate,
460 QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());
461 void paintEvent(QPaintEvent *e) override;
462 void updateScrollerRects(const QRect &rect);
463
464 private:
465 QMenuPrivate *menuPrivate;
466 Type scrollType;
467 };
470
471 void drawScroller(QPainter *painter, ScrollerTearOffItem::Type type, const QRect &rect);
472 void drawTearOff(QPainter *painter, const QRect &rect);
473 QRect rect() const;
474
475 bool considerAction(const QAction *action) const
476 {
477 Q_Q(const QMenu);
478 if (!action || action->isSeparator())
479 return false;
480 if (action->isEnabled())
481 return true;
482 return q->style()->styleHint(QStyle::SH_Menu_AllowActiveAndDisabled, nullptr, q);
483 }
484
485 mutable uint maxIconWidth = 0;
486 mutable uint tabWidth = 0;
487 int motions = 0;
489
491
492 mutable quint8 ncols = 0; // "255cols ought to be enough for anybody."
493
494 // Contains the screen of the popup point during popup(QPoint).
495 // This is to make sure the screen is remembered,
496 // when the menu contains many items on multiple screens
498
499 mutable bool itemsDirty : 1;
500 mutable bool hasCheckableItems : 1;
506 // Selection
507 bool hasHadMouse : 1;
508 bool aboutToHide : 1;
509 // Tear-off menus
510 bool tearoff : 1;
511 bool tornoff : 1;
513 //menu fading/scrolling effects
515};
516
517QT_END_NAMESPACE
518
519#endif // QMENU_P_H
The QDockWidget class provides a widget that can be docked inside a QMainWindow or floated as a top-l...
Definition qdockwidget.h:21
\inmodule QtCore
Definition qhash.h:837
The QMainWindow class provides a main application window.
Definition qmainwindow.h:26
ScrollerTearOffItem(Type type, QMenuPrivate *mPrivate, QWidget *parent=nullptr, Qt::WindowFlags f=Qt::WindowFlags())
Definition qmenu.cpp:1023
void updateScrollerRects(const QRect &rect)
Definition qmenu.cpp:1049
void paintEvent(QPaintEvent *e) override
This event handler can be reimplemented in a subclass to receive paint events passed in event.
Definition qmenu.cpp:1030
void updateLayoutDirection()
Definition qmenu.cpp:944
void init()
Definition qmenu.cpp:156
QPointer< QPlatformMenu > platformMenu
Definition qmenu_p.h:450
quint8 ncols
Definition qmenu_p.h:492
QEventLoop * eventLoop
Definition qmenu_p.h:397
QAction * menuAction
Definition qmenu_p.h:431
uint maxIconWidth
Definition qmenu_p.h:485
QList< QRect > actionRects
Definition qmenu_p.h:319
bool delayedPopupGuard
Definition qmenu_p.h:504
QPointer< QWidget > noReplayFor
Definition qmenu_p.h:454
void _q_actionTriggered()
Definition qmenu.cpp:1511
void hideUpToMenuBar()
Definition qmenu.cpp:516
@ SelectedFromElsewhere
Definition qmenu_p.h:365
@ SelectedFromKeyboard
Definition qmenu_p.h:364
void scrollMenu(QMenuScroller::ScrollLocation location, bool active=false)
Definition qmenu.cpp:1232
QString searchBuffer
Definition qmenu_p.h:401
int getLastVisibleAction() const
Definition qmenu.cpp:487
void popupAction(QAction *, int, bool)
Definition qmenu.cpp:646
void activateCausedStack(const QList< QPointer< QWidget > > &, QAction *, QAction::ActionEvent, bool)
Definition qmenu.cpp:1401
static QMenu * mouseDown
Definition qmenu_p.h:330
void popup(const QPoint &p, QAction *atAction, PositionFunction positionFunction={})
Definition qmenu.cpp:2306
void updateActionRects() const
Definition qmenu.cpp:331
bool tearoffHighlighted
Definition qmenu_p.h:512
QPointer< QTornOffMenu > tornPopup
Definition qmenu_p.h:424
void setSyncAction()
Definition qmenu.cpp:665
int indexOf(QAction *act) const
Definition qmenu_p.h:421
QPointer< QAction > syncAction
Definition qmenu_p.h:398
void syncPlatformMenu()
Definition qmenu.cpp:202
bool lastContextMenu
Definition qmenu_p.h:501
QPlatformMenuItem * insertActionInPlatformMenu(const QAction *action, QPlatformMenuItem *beforeItem)
Definition qmenu.cpp:263
bool hasHadMouse
Definition qmenu_p.h:507
int scrollerHeight() const
Definition qmenu.cpp:277
QPlatformMenu * createPlatformMenu()
Definition qmenu.cpp:181
bool hasCheckableItems
Definition qmenu_p.h:500
void setFirstActionActive()
Definition qmenu.cpp:683
void updateActionRects(const QRect &screen) const
Definition qmenu.cpp:336
void hideMenu(QMenu *menu)
Definition qmenu.cpp:544
QBasicTimer searchBufferTimer
Definition qmenu_p.h:402
void _q_overrideMenuActionDestroyed()
Definition qmenu.cpp:939
bool mouseEventTaken(QMouseEvent *)
Definition qmenu.cpp:1312
ScrollerTearOffItem * scrollDownItem
Definition qmenu_p.h:469
bool isContextMenu() const
Definition qmenu.cpp:322
void _q_platformMenuAboutToShow()
Definition qmenu.cpp:1551
QPointer< QAction > defaultAction
Definition qmenu_p.h:429
virtual QList< QPointer< QWidget > > calcCausedStack() const
Definition qmenu.cpp:307
void drawScroller(QPainter *painter, ScrollerTearOffItem::Type type, const QRect &rect)
Definition qmenu.cpp:960
QRect actionRect(QAction *) const
Definition qmenu.cpp:504
QRect rect() const
Definition qmenu.cpp:1010
bool useFullScreenForPopup() const
Definition qmenu.cpp:285
void activateAction(QAction *, QAction::ActionEvent, bool self=true)
Definition qmenu.cpp:1442
bool collapsibleSeparators
Definition qmenu_p.h:502
void copyActionToPlatformItem(const QAction *action, QPlatformMenuItem *item)
Definition qmenu.cpp:226
QMenuSloppyState sloppyState
Definition qmenu_p.h:426
QHash< QAction *, QWidget * > widgetItems
Definition qmenu_p.h:320
bool tearoff
Definition qmenu_p.h:510
bool itemsDirty
Definition qmenu_p.h:499
QPointer< QAction > actionAboutToTrigger
Definition qmenu_p.h:452
void scrollMenu(QAction *action, QMenuScroller::ScrollLocation location, bool active=false)
Definition qmenu.cpp:1118
void setOverrideMenuAction(QAction *)
Definition qmenu.cpp:927
bool activationRecursionGuard
Definition qmenu_p.h:490
QAction * actionAt(QPoint p) const
Definition qmenu.cpp:915
QWidget * topCausedWidget() const
Definition qmenu.cpp:907
static QMenuPrivate * get(QMenu *m)
Definition qmenu_p.h:311
QPointF mousePopupPos
Definition qmenu_p.h:331
bool aboutToHide
Definition qmenu_p.h:508
void scrollMenu(QMenuScroller::ScrollDirection direction, bool page=false, bool active=false)
Definition qmenu.cpp:1265
QPointer< QScreen > popupScreen
Definition qmenu_p.h:497
QWindow * transientParentWindow() const
Definition qmenu.cpp:623
void drawTearOff(QPainter *painter, const QRect &rect)
Definition qmenu.cpp:986
bool tornoff
Definition qmenu_p.h:511
bool toolTipsVisible
Definition qmenu_p.h:503
QPointer< QMenu > activeMenu
Definition qmenu_p.h:405
void setCurrentAction(QAction *, int popup=-1, SelectionReason reason=SelectedFromElsewhere, SelectionDirection direction=SelectionDirection::Down, bool activateFirst=false)
Definition qmenu.cpp:704
QAction * currentAction
Definition qmenu_p.h:333
QAction * exec(const QPoint &p, QAction *action, PositionFunction positionFunction={})
Definition qmenu.cpp:2660
uint tabWidth
Definition qmenu_p.h:486
void _q_actionHovered()
Definition qmenu.cpp:1543
QRect popupGeometry(QScreen *screen=nullptr) const
Definition qmenu.cpp:290
QMenuCaused causedPopup
Definition qmenu_p.h:414
bool doChildEffects
Definition qmenu_p.h:514
bool hasReceievedEnter
Definition qmenu_p.h:505
bool hasMouseMoved(const QPoint &globalPos)
Definition qmenu.cpp:1572
bool considerAction(const QAction *action) const
Definition qmenu_p.h:475
ScrollerTearOffItem * scrollUpTearOffItem
Definition qmenu_p.h:468
QAction * defaultMenuAction
Definition qmenu_p.h:432
void setPlatformMenu(QPlatformMenu *menu)
Definition qmenu.cpp:189
int mousePopupDelay
Definition qmenu_p.h:488
void childEnter()
Definition qmenu.cpp:806
bool hasParentActiveDelayTimer() const
Definition qmenu.cpp:846
QMenu * subMenu() const
Definition qmenu_p.h:247
bool checkSlope(qreal oldS, qreal newS, bool wantSteeper)
Definition qmenu_p.h:158
MouseEventResult processMouseEvent(const QPointF &mousePos, QAction *resetAction, QAction *currentAction)
Definition qmenu_p.h:165
bool isTimerId(int timerId) const
Definition qmenu_p.h:246
void startTimer()
Definition qmenu_p.h:127
void childLeave()
Definition qmenu.cpp:822
@ EventDiscardsSloppyState
Definition qmenu_p.h:124
@ EventShouldBePropagated
Definition qmenu_p.h:123
bool enabled() const
Definition qmenu_p.h:119
void setSubMenuPopup(const QRect &actionRect, QAction *resetAction, QMenu *subMenu)
Definition qmenu.cpp:831
static qreal slope(const QPointF &p1, const QPointF &p2)
Definition qmenu_p.h:150
void stopTimer()
Definition qmenu_p.h:139
int timeForTimeout() const
Definition qmenu_p.h:244
void startTimerIfNotRunning()
Definition qmenu_p.h:133
friend class QWidget
Definition qpainter.h:431
QSetValueOnDestroy(T &toSet, T value)
Definition qmenu_p.h:81
void animate(QWidget *widget, const QRect &final_geometry, bool animate)
void abort(QWidget *widget)
bool animating() const
QT_REQUIRE_CONFIG(animation)
static int grow(QLayoutStruct &ls, int delta)
static QRect dockedGeometry(QWidget *widget)
static Qt::DockWidgetArea toDockWidgetArea(QInternal::DockPosition pos)
static int realMinSize(const QDockAreaLayoutInfo &info)
static int qMax(int i1, int i2, int i3)
static int shrink(QLayoutStruct &ls, int delta)
static const int zero
static int separatorMoveHelper(QList< QLayoutStruct > &list, int index, int delta, int sep)
static QInternal::DockPosition dockPosHelper(const QRect &rect, const QPoint &_pos, Qt::Orientation o, bool nestingEnabled, QDockAreaLayoutInfo::TabMode tabMode)
static void paintSep(QPainter *p, QWidget *w, const QRect &r, Qt::Orientation o, bool mouse_over)
static int realMaxSize(const QDockAreaLayoutInfo &info)
QMainWindowLayout * qt_mainwindow_layout(const QMainWindow *window)
@ StateFlagFloating
@ StateFlagVisible
QT_REQUIRE_CONFIG(dockwidget)
QT_BEGIN_NAMESPACE Q_DECLARE_LOGGING_CATEGORY(lcEventDispatcher)
QT_REQUIRE_CONFIG(mainwindow)
static int perp(Qt::Orientation o, const QPoint &pos)
Definition qmenu_p.h:56
static int & rperp(Qt::Orientation o, QPoint &pos)
Definition qmenu_p.h:62
static int & rpick(Qt::Orientation o, QPoint &pos)
Definition qmenu_p.h:47
static QT_BEGIN_NAMESPACE int pick(Qt::Orientation o, const QPoint &pos)
Definition qmenu_p.h:41
QT_REQUIRE_CONFIG(thread)
void start(int timeout, QAction *toStartAction)
Definition qmenu_p.h:346
void initialize(QMenu *parent)
Definition qmenu_p.h:341
QPointer< QWidget > widget
Definition qmenu_p.h:410
QPointer< QAction > action
Definition qmenu_p.h:411