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
qquickpopup_p.h
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// Qt-Security score:significant reason:default
4
5#ifndef QQUICKPOPUP_P_H
6#define QQUICKPOPUP_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 <QtCore/qobject.h>
20#include <QtCore/qmargins.h>
21#include <QtGui/qevent.h>
22#include <QtCore/qlocale.h>
23#include <QtGui/qfont.h>
24#include <QtGui/qpalette.h>
25#include <QtQuickTemplates2/private/qtquicktemplates2global_p.h>
26#include <QtQml/qqml.h>
27#include <QtQml/qqmllist.h>
28#include <QtQml/qqmlparserstatus.h>
29#include <QtQuick/qquickitem.h>
30#include <QtQuick/private/qquicksafearea_p.h>
31#include <QtQuick/private/qquickattachedpropertypropagatortarget_p.h>
32
33#if QT_CONFIG(accessibility)
34#include <QtGui/qaccessible.h>
35#endif
36
38
39class QQuickWindow;
40class QQuickPopupAnchors;
41class QQuickPopupPrivate;
42class QQuickTransition;
43
44class Q_QUICKTEMPLATES2_EXPORT QQuickPopup
45 : public QObject
46 , public QQmlParserStatus
47 , private QQuickSafeAreaAttachable
48 , public QQuickAttachedPropertyPropagatorTarget
49{
50 Q_OBJECT
51 Q_INTERFACES(QQmlParserStatus)
52 Q_INTERFACES(QQuickSafeAreaAttachable)
53 Q_INTERFACES(QQuickAttachedPropertyPropagatorTarget)
54 Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged FINAL)
55 Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged FINAL)
56 Q_PROPERTY(qreal z READ z WRITE setZ RESET resetZ NOTIFY zChanged FINAL)
57 Q_PROPERTY(qreal width READ width WRITE setWidth RESET resetWidth NOTIFY widthChanged FINAL)
58 Q_PROPERTY(qreal height READ height WRITE setHeight RESET resetHeight NOTIFY heightChanged FINAL)
59 Q_PROPERTY(qreal implicitWidth READ implicitWidth WRITE setImplicitWidth NOTIFY implicitWidthChanged FINAL)
60 Q_PROPERTY(qreal implicitHeight READ implicitHeight WRITE setImplicitHeight NOTIFY implicitHeightChanged FINAL)
61 Q_PROPERTY(qreal contentWidth READ contentWidth WRITE setContentWidth NOTIFY contentWidthChanged FINAL)
62 Q_PROPERTY(qreal contentHeight READ contentHeight WRITE setContentHeight NOTIFY contentHeightChanged FINAL)
63 Q_PROPERTY(qreal availableWidth READ availableWidth NOTIFY availableWidthChanged FINAL)
64 Q_PROPERTY(qreal availableHeight READ availableHeight NOTIFY availableHeightChanged FINAL)
65 Q_PROPERTY(qreal margins READ margins WRITE setMargins RESET resetMargins NOTIFY marginsChanged FINAL)
66 Q_PROPERTY(qreal topMargin READ topMargin WRITE setTopMargin RESET resetTopMargin NOTIFY topMarginChanged FINAL)
67 Q_PROPERTY(qreal leftMargin READ leftMargin WRITE setLeftMargin RESET resetLeftMargin NOTIFY leftMarginChanged FINAL)
68 Q_PROPERTY(qreal rightMargin READ rightMargin WRITE setRightMargin RESET resetRightMargin NOTIFY rightMarginChanged FINAL)
69 Q_PROPERTY(qreal bottomMargin READ bottomMargin WRITE setBottomMargin RESET resetBottomMargin NOTIFY bottomMarginChanged FINAL)
70 Q_PROPERTY(qreal padding READ padding WRITE setPadding RESET resetPadding NOTIFY paddingChanged FINAL)
71 Q_PROPERTY(qreal topPadding READ topPadding WRITE setTopPadding RESET resetTopPadding NOTIFY topPaddingChanged FINAL)
72 Q_PROPERTY(qreal leftPadding READ leftPadding WRITE setLeftPadding RESET resetLeftPadding NOTIFY leftPaddingChanged FINAL)
73 Q_PROPERTY(qreal rightPadding READ rightPadding WRITE setRightPadding RESET resetRightPadding NOTIFY rightPaddingChanged FINAL)
74 Q_PROPERTY(qreal bottomPadding READ bottomPadding WRITE setBottomPadding RESET resetBottomPadding NOTIFY bottomPaddingChanged FINAL)
75 Q_PROPERTY(QLocale locale READ locale WRITE setLocale RESET resetLocale NOTIFY localeChanged FINAL)
76 Q_PROPERTY(QFont font READ font WRITE setFont RESET resetFont NOTIFY fontChanged FINAL)
77 Q_PROPERTY(QQuickItem *parent READ parentItem WRITE setParentItem RESET resetParentItem NOTIFY parentChanged FINAL)
78 Q_PROPERTY(QQuickItem *background READ background WRITE setBackground NOTIFY backgroundChanged FINAL)
79 Q_PROPERTY(QQuickItem *contentItem READ contentItem WRITE setContentItem NOTIFY contentItemChanged FINAL)
80 Q_PRIVATE_PROPERTY(QQuickPopup::d_func(), QQmlListProperty<QObject> contentData READ contentData VIRTUAL)
81 Q_PRIVATE_PROPERTY(QQuickPopup::d_func(), QQmlListProperty<QQuickItem> contentChildren READ contentChildren NOTIFY contentChildrenChanged FINAL)
82 Q_PROPERTY(bool clip READ clip WRITE setClip NOTIFY clipChanged FINAL)
83 Q_PROPERTY(bool focus READ hasFocus WRITE setFocus NOTIFY focusChanged FINAL)
84 Q_PROPERTY(bool activeFocus READ hasActiveFocus NOTIFY activeFocusChanged FINAL)
85 Q_PROPERTY(bool modal READ isModal WRITE setModal NOTIFY modalChanged FINAL)
86 Q_PROPERTY(bool dim READ dim WRITE setDim RESET resetDim NOTIFY dimChanged FINAL)
87 Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged FINAL)
88 Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged FINAL)
89 Q_PROPERTY(qreal scale READ scale WRITE setScale NOTIFY scaleChanged FINAL)
90 Q_PROPERTY(ClosePolicy closePolicy READ closePolicy WRITE setClosePolicy RESET resetClosePolicy NOTIFY closePolicyChanged FINAL)
91 Q_PROPERTY(TransformOrigin transformOrigin READ transformOrigin WRITE setTransformOrigin FINAL)
92 Q_PROPERTY(QQuickTransition *enter READ enter WRITE setEnter NOTIFY enterChanged FINAL)
93 Q_PROPERTY(QQuickTransition *exit READ exit WRITE setExit NOTIFY exitChanged FINAL)
94 // 2.1 (Qt 5.8)
95 Q_PROPERTY(qreal spacing READ spacing WRITE setSpacing RESET resetSpacing NOTIFY spacingChanged FINAL REVISION(2, 1))
96 // 2.3 (Qt 5.10)
97 Q_PROPERTY(bool opened READ isOpened NOTIFY openedChanged FINAL REVISION(2, 3))
98 Q_PROPERTY(bool mirrored READ isMirrored NOTIFY mirroredChanged FINAL REVISION(2, 3))
99 Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged FINAL REVISION(2, 3))
100 Q_PRIVATE_PROPERTY(QQuickPopup::d_func(), QQuickPalette *palette READ palette WRITE setPalette RESET resetPalette NOTIFY paletteChanged REVISION(2, 3))
101 // 2.5 (Qt 5.12)
102 Q_PROPERTY(qreal horizontalPadding READ horizontalPadding WRITE setHorizontalPadding RESET resetHorizontalPadding NOTIFY horizontalPaddingChanged FINAL)
103 Q_PROPERTY(qreal verticalPadding READ verticalPadding WRITE setVerticalPadding RESET resetVerticalPadding NOTIFY verticalPaddingChanged FINAL)
104 Q_PRIVATE_PROPERTY(QQuickPopup::d_func(), QQuickPopupAnchors *anchors READ getAnchors DESIGNABLE false CONSTANT FINAL REVISION(2, 5))
105 Q_PROPERTY(qreal implicitContentWidth READ implicitContentWidth NOTIFY implicitContentWidthChanged FINAL REVISION(2, 5))
106 Q_PROPERTY(qreal implicitContentHeight READ implicitContentHeight NOTIFY implicitContentHeightChanged FINAL REVISION(2, 5))
107 Q_PROPERTY(qreal implicitBackgroundWidth READ implicitBackgroundWidth NOTIFY implicitBackgroundWidthChanged FINAL REVISION(2, 5))
108 Q_PROPERTY(qreal implicitBackgroundHeight READ implicitBackgroundHeight NOTIFY implicitBackgroundHeightChanged FINAL REVISION(2, 5))
109 Q_PROPERTY(qreal topInset READ topInset WRITE setTopInset RESET resetTopInset NOTIFY topInsetChanged FINAL REVISION(2, 5))
110 Q_PROPERTY(qreal leftInset READ leftInset WRITE setLeftInset RESET resetLeftInset NOTIFY leftInsetChanged FINAL REVISION(2, 5))
111 Q_PROPERTY(qreal rightInset READ rightInset WRITE setRightInset RESET resetRightInset NOTIFY rightInsetChanged FINAL REVISION(2, 5))
112 Q_PROPERTY(qreal bottomInset READ bottomInset WRITE setBottomInset RESET resetBottomInset NOTIFY bottomInsetChanged FINAL REVISION(2, 5))
113 Q_PROPERTY(PopupType popupType READ popupType WRITE setPopupType NOTIFY popupTypeChanged FINAL REVISION(6, 8))
114 Q_CLASSINFO("DeferredPropertyNames", "background,contentItem")
115 Q_CLASSINFO("DefaultProperty", "contentData")
116 QML_NAMED_ELEMENT(Popup)
117 QML_ADDED_IN_VERSION(2, 0)
118
119public:
120 explicit QQuickPopup(QObject *parent = nullptr);
121 ~QQuickPopup();
122
123 qreal x() const;
124 void setX(qreal x);
125
126 qreal y() const;
127 void setY(qreal y);
128
129 QPointF position() const;
130 void setPosition(const QPointF &pos);
131
132 qreal z() const;
133 void setZ(qreal z);
134 void resetZ();
135
136 qreal width() const;
137 void setWidth(qreal width);
138 void resetWidth();
139
140 qreal height() const;
141 void setHeight(qreal height);
142 void resetHeight();
143
144 qreal implicitWidth() const;
145 void setImplicitWidth(qreal width);
146
147 qreal implicitHeight() const;
148 void setImplicitHeight(qreal height);
149
150 qreal contentWidth() const;
151 void setContentWidth(qreal width);
152
153 qreal contentHeight() const;
154 void setContentHeight(qreal height);
155
156 qreal availableWidth() const;
157 qreal availableHeight() const;
158
159 qreal margins() const;
160 void setMargins(qreal margins);
161 void resetMargins();
162
163 qreal topMargin() const;
164 void setTopMargin(qreal margin);
165 void resetTopMargin();
166
167 qreal leftMargin() const;
168 void setLeftMargin(qreal margin);
169 void resetLeftMargin();
170
171 qreal rightMargin() const;
172 void setRightMargin(qreal margin);
173 void resetRightMargin();
174
175 qreal bottomMargin() const;
176 void setBottomMargin(qreal margin);
177 void resetBottomMargin();
178
179 qreal padding() const;
180 void setPadding(qreal padding);
181 void resetPadding();
182
183 qreal topPadding() const;
184 void setTopPadding(qreal padding);
185 void resetTopPadding();
186
187 qreal leftPadding() const;
188 void setLeftPadding(qreal padding);
189 void resetLeftPadding();
190
191 qreal rightPadding() const;
192 void setRightPadding(qreal padding);
193 void resetRightPadding();
194
195 qreal bottomPadding() const;
196 void setBottomPadding(qreal padding);
197 void resetBottomPadding();
198
199 QLocale locale() const;
200 void setLocale(const QLocale &locale);
201 void resetLocale();
202
203 QFont font() const;
204 void setFont(const QFont &font);
205 void resetFont();
206
207 QQuickWindow *window() const;
208 QQuickItem *popupItem() const;
209
210 QQuickItem *parentItem() const;
211 void setParentItem(QQuickItem *parent);
212 void resetParentItem();
213
214 QQuickItem *background() const;
215 void setBackground(QQuickItem *background);
216
217 QQuickItem *contentItem() const;
218 void setContentItem(QQuickItem *item);
219
220 bool clip() const;
221 void setClip(bool clip);
222
223 bool hasFocus() const;
224 void setFocus(bool focus);
225
226 bool hasActiveFocus() const;
227
228 bool isModal() const;
229 void setModal(bool modal);
230
231 bool dim() const;
232 void setDim(bool dim);
233 void resetDim();
234
235 virtual bool isVisible() const;
236 virtual void setVisible(bool visible);
237
238 qreal opacity() const;
239 virtual void setOpacity(qreal opacity);
240
241 qreal scale() const;
242 void setScale(qreal scale);
243
244 enum ClosePolicyFlag {
245 NoAutoClose = 0x00,
246 CloseOnPressOutside = 0x01,
247 CloseOnPressOutsideParent = 0x02,
248 CloseOnReleaseOutside = 0x04,
249 CloseOnReleaseOutsideParent = 0x08,
250 CloseOnEscape = 0x10,
251 CloseMultiple = 0x20,
252 };
253 Q_DECLARE_FLAGS(ClosePolicy, ClosePolicyFlag)
254 Q_FLAG(ClosePolicy)
255
256 ClosePolicy closePolicy() const;
257 void setClosePolicy(ClosePolicy policy);
258 void resetClosePolicy();
259
260 // keep in sync with Item.TransformOrigin
261 enum TransformOrigin {
262 TopLeft, Top, TopRight,
263 Left, Center, Right,
264 BottomLeft, Bottom, BottomRight
265 };
266 Q_ENUM(TransformOrigin)
267
268 TransformOrigin transformOrigin() const;
269 void setTransformOrigin(TransformOrigin);
270
271 QQuickTransition *enter() const;
272 void setEnter(QQuickTransition *transition);
273
274 QQuickTransition *exit() const;
275 void setExit(QQuickTransition *transition);
276
277 bool filtersChildMouseEvents() const;
278 void setFiltersChildMouseEvents(bool filter);
279
280 Q_INVOKABLE void forceActiveFocus(Qt::FocusReason reason = Qt::OtherFocusReason);
281
282 // 2.1 (Qt 5.8)
283 qreal spacing() const;
284 void setSpacing(qreal spacing);
285 void resetSpacing();
286
287 // 2.3 (Qt 5.10)
288 bool isOpened() const;
289 bool isMirrored() const;
290
291 bool isEnabled() const;
292 void setEnabled(bool enabled);
293
294 // 2.5 (Qt 5.12)
295 qreal horizontalPadding() const;
296 void setHorizontalPadding(qreal padding);
297 void resetHorizontalPadding();
298
299 qreal verticalPadding() const;
300 void setVerticalPadding(qreal padding);
301 void resetVerticalPadding();
302
303 qreal implicitContentWidth() const;
304 qreal implicitContentHeight() const;
305
306 qreal implicitBackgroundWidth() const;
307 qreal implicitBackgroundHeight() const;
308
309 qreal topInset() const;
310 void setTopInset(qreal inset);
311 void resetTopInset();
312
313 qreal leftInset() const;
314 void setLeftInset(qreal inset);
315 void resetLeftInset();
316
317 qreal rightInset() const;
318 void setRightInset(qreal inset);
319 void resetRightInset();
320
321 qreal bottomInset() const;
322 void setBottomInset(qreal inset);
323 void resetBottomInset();
324
325 void setWindowModality(const Qt::WindowModality modality);
326
327 enum PopupType {
328 Item,
329 Window,
330 Native
331 };
332 Q_ENUM(PopupType)
333
334 PopupType popupType() const;
335 void setPopupType(PopupType);
336
337public Q_SLOTS:
338 void open();
339 void close();
340
341Q_SIGNALS:
342 void opened();
343 void closed();
344 void aboutToShow();
345 void aboutToHide();
346 void xChanged();
347 void yChanged();
348 void zChanged();
349 void widthChanged();
350 void heightChanged();
351 void implicitWidthChanged();
352 void implicitHeightChanged();
353 void contentWidthChanged();
354 void contentHeightChanged();
355 void availableWidthChanged();
356 void availableHeightChanged();
357 void marginsChanged();
358 void topMarginChanged();
359 void leftMarginChanged();
360 void rightMarginChanged();
361 void bottomMarginChanged();
362 void paddingChanged();
363 void topPaddingChanged();
364 void leftPaddingChanged();
365 void rightPaddingChanged();
366 void bottomPaddingChanged();
367 void fontChanged();
368 void localeChanged();
369 void parentChanged();
370 void backgroundChanged();
371 void contentItemChanged();
372 void contentChildrenChanged();
373 void clipChanged();
374 void focusChanged();
375 void activeFocusChanged();
376 void modalChanged();
377 void dimChanged();
378 void visibleChanged();
379 void opacityChanged();
380 void scaleChanged();
381 void closePolicyChanged();
382 void enterChanged();
383 void exitChanged();
384 void windowChanged(QQuickWindow *window);
385 // 2.1 (Qt 5.8)
386 Q_REVISION(2, 1) void spacingChanged();
387 // 2.3 (Qt 5.10)
388 Q_REVISION(2, 3) void openedChanged();
389 Q_REVISION(2, 3) void mirroredChanged();
390 Q_REVISION(2, 3) void enabledChanged();
391 Q_REVISION(2, 3) void paletteChanged();
392 Q_REVISION(2, 3) void paletteCreated();
393 // 2.5 (Qt 5.12)
394 Q_REVISION(2, 5) void horizontalPaddingChanged();
395 Q_REVISION(2, 5) void verticalPaddingChanged();
396 Q_REVISION(2, 5) void implicitContentWidthChanged();
397 Q_REVISION(2, 5) void implicitContentHeightChanged();
398 Q_REVISION(2, 5) void implicitBackgroundWidthChanged();
399 Q_REVISION(2, 5) void implicitBackgroundHeightChanged();
400 Q_REVISION(2, 5) void topInsetChanged();
401 Q_REVISION(2, 5) void leftInsetChanged();
402 Q_REVISION(2, 5) void rightInsetChanged();
403 Q_REVISION(2, 5) void bottomInsetChanged();
404 Q_REVISION(6, 8) void popupTypeChanged();
405
406protected:
407 QQuickPopup(QQuickPopupPrivate &dd, QObject *parent);
408
409 void classBegin() override;
410 void componentComplete() override;
411 bool isComponentComplete() const;
412
413 virtual bool childMouseEventFilter(QQuickItem *child, QEvent *event);
414 virtual void focusInEvent(QFocusEvent *event);
415 virtual void focusOutEvent(QFocusEvent *event);
416 virtual void keyPressEvent(QKeyEvent *event);
417 virtual void keyReleaseEvent(QKeyEvent *event);
418 virtual void mousePressEvent(QMouseEvent *event);
419 virtual void mouseMoveEvent(QMouseEvent *event);
420 virtual void mouseReleaseEvent(QMouseEvent *event);
421 virtual void mouseDoubleClickEvent(QMouseEvent *event);
422 virtual void mouseUngrabEvent();
423 virtual bool overlayEvent(QQuickItem *item, QEvent *event);
424#if QT_CONFIG(quicktemplates2_multitouch)
425 virtual void touchEvent(QTouchEvent *event);
426 virtual void touchUngrabEvent();
427#endif
428#if QT_CONFIG(wheelevent)
429 virtual void wheelEvent(QWheelEvent *event);
430#endif
431#if QT_CONFIG(quick_draganddrop)
432 virtual void dragEnterEvent(QDragEnterEvent *event);
433 virtual void dragMoveEvent(QDragMoveEvent *event);
434 virtual void dragLeaveEvent(QDragLeaveEvent *event);
435 virtual void dropEvent(QDropEvent *event);
436#endif
437
438 virtual void contentItemChange(QQuickItem *newItem, QQuickItem *oldItem);
439 virtual void contentSizeChange(const QSizeF &newSize, const QSizeF &oldSize);
440 virtual void fontChange(const QFont &newFont, const QFont &oldFont);
441 virtual void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry);
442 virtual void localeChange(const QLocale &newLocale, const QLocale &oldLocale);
443 virtual void itemChange(QQuickItem::ItemChange change, const QQuickItem::ItemChangeData &data);
444 virtual void marginsChange(const QMarginsF &newMargins, const QMarginsF &oldMargins);
445 virtual void paddingChange(const QMarginsF &newPadding, const QMarginsF &oldPadding);
446 virtual void spacingChange(qreal newSpacing, qreal oldSpacing);
447 virtual void insetChange(const QMarginsF &newInset, const QMarginsF &oldInset);
448
449 virtual QFont defaultFont() const;
450
451#if QT_CONFIG(accessibility)
452 QAccessible::Role effectiveAccessibleRole() const;
453private:
454 virtual QAccessible::Role accessibleRole() const;
455protected:
456 virtual void accessibilityActiveChanged(bool active);
457#endif
458
459 QString accessibleName() const;
460 void maybeSetAccessibleName(const QString &name);
461
462 QVariant accessibleProperty(const char *propertyName);
463 bool setAccessibleProperty(const char *propertyName, const QVariant &value);
464
465private:
466 QQuickItem *findParentItem() const;
467
468 QQuickItem *safeAreaAttachmentItem() override;
469
470 QQuickItem *attacheeItem() const override;
471 QtPrivate::QQuickAttachedPropertyPropagator *attachedParent(
472 const QMetaObject *attachedType) const override;
473
474 Q_DISABLE_COPY(QQuickPopup)
475 Q_DECLARE_PRIVATE(QQuickPopup)
476 friend class QQuickPopupWindow;
477 friend class QQuickPopupItem;
478 friend class QQuickOverlay;
479 friend class QQuickOverlayPrivate;
480};
481
482Q_DECLARE_OPERATORS_FOR_FLAGS(QQuickPopup::ClosePolicy)
483
484QT_END_NAMESPACE
485
486#endif // QQUICKPOPUP_P_H
QAccessibleQuickPopupItem(QQuickPopupItem *popupItem)
QAccessible::State state() const override
Combined button and popup list for selecting options.