39 Q_DECLARE_PUBLIC(QQuickMenu)
43 static QQuickMenuPrivate *get(QQuickMenu *menu)
45 return menu->d_func();
50 QPlatformMenu *nativeHandle();
51 QPlatformMenu *maybeNativeHandle()
const;
52 QQuickMenu *rootMenu()
const;
53 bool useNativeMenu()
const;
54 bool createNativeMenu();
55 void removeNativeMenu();
56 void syncWithNativeMenu();
57 void syncWithUseNativeMenu();
58 void setNativeMenuVisible(
bool visible);
62 QQuickItem *itemAt(
int index)
const;
63 void insertItem(
int index, QQuickItem *item);
64 void maybeCreateAndInsertNativeItem(
int index, QQuickItem *item);
65 void moveItem(
int from,
int to);
66 enum class DestructionPolicy {
70 void removeItem(
int index, QQuickItem *item,
71 DestructionPolicy destructionPolicy = DestructionPolicy::DoNotDestroy);
72 enum class SyncPolicy {
76 void removeNativeItem(
int index, SyncPolicy syncPolicy = SyncPolicy::Sync);
77 void resetNativeData();
79 static void recursivelyCreateNativeMenuItems(QQuickMenu *menu);
81 void printContentModelItems()
const;
83 QQuickItem *beginCreateItem();
84 void completeCreateItem();
86 QQuickItem *createItem(QQuickMenu *menu);
87 QQuickItem *createItem(QQuickAction *action);
89 void resizeItem(QQuickItem *item);
92 void itemChildAdded(QQuickItem *item, QQuickItem *child) override;
93 void itemSiblingOrderChanged(QQuickItem *item) override;
94 void itemParentChanged(QQuickItem *item, QQuickItem *parent) override;
95 void itemDestroyed(QQuickItem *item) override;
96 void itemGeometryChanged(QQuickItem *, QQuickGeometryChange change,
const QRectF &diff) override;
98 QQuickPopupPositioner *getPositioner() override;
99 bool prepareEnterTransition() override;
100 bool prepareExitTransition() override;
101 bool blockInput(QQuickItem *item,
const QPointF &point)
const override;
102 bool handlePress(QQuickItem *item,
const QPointF &point, ulong timestamp) override;
103 bool handleReleaseWithoutGrab(
const QEventPoint &eventPoint) override;
105 void onItemHovered();
106 void onItemTriggered();
107 void onItemActiveFocusChanged();
108 void updateTextPadding();
110 QQuickMenu *currentSubMenu()
const;
111 void setParentMenu(QQuickMenu *parent);
112 void resolveParentItem();
114 void popup(QQuickItem *menuItem =
nullptr);
116 void propagateKeyEvent(QKeyEvent *event);
118 void startHoverTimer();
119 void stopHoverTimer();
121 void setCurrentIndex(
int index, Qt::FocusReason reason);
122 bool activateNextItem();
123 bool activatePreviousItem();
125 QQuickMenuItem *firstEnabledMenuItem()
const;
127 static void contentData_append(QQmlListProperty<QObject> *prop, QObject *obj);
128 static qsizetype contentData_count(QQmlListProperty<QObject> *prop);
129 static QObject *contentData_at(QQmlListProperty<QObject> *prop, qsizetype index);
130 static void contentData_clear(QQmlListProperty<QObject> *prop);
132 QPalette defaultPalette()
const override;
133 virtual QQuickPopup::PopupType resolvedPopupType()
const override;
135 void resetContentItem();
137 bool cascade =
false;
138 bool triedToCreateNativeMenu =
false;
140 int currentIndex = -1;
142 qreal textPadding = 0;
143 QPointer<QQuickMenu> parentMenu;
144 QPointer<QQuickMenuItem> currentItem;
145 QPointer<QQuickItem> contentItem;
146 QList<QObject *> contentData;
147 QPointer<QQmlObjectModel> contentModel;
148 QQmlComponent *delegate =
nullptr;
153 std::unique_ptr<QPlatformMenu> handle =
nullptr;
154 QList<QQuickNativeMenuItem *> nativeItems;
155 QPointer<QQuickMenuBar> menuBar;
156 qreal lastDevicePixelRatio = 0;