Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qquickdrawer.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 "qquickdrawer_p.h"
5#include "qquickdrawer_p_p.h"
8
9#include <QtGui/qstylehints.h>
10#include <QtGui/private/qguiapplication_p.h>
11#include <QtQml/qqmlinfo.h>
12#include <QtQuick/private/qquickwindow_p.h>
13#include <QtQuick/private/qquickanimation_p.h>
14#include <QtQuick/private/qquicktransition_p.h>
15
17
22
142{
143public:
145
146 void reposition() override;
147};
148
150{
151 qreal offset = positionAt(point) - position;
152
153 // don't jump when dragged open
154 if (offset > 0 && position > 0 && !contains(point))
155 offset = 0;
156
157 return offset;
158}
159
161{
162 Q_Q(const QQuickDrawer);
163 QQuickWindow *window = q->window();
164 if (!window)
165 return 0;
166
167 switch (edge) {
168 case Qt::TopEdge:
169 return point.y() / q->height();
170 case Qt::LeftEdge:
171 return point.x() / q->width();
172 case Qt::RightEdge:
173 return (window->width() - point.x()) / q->width();
174 case Qt::BottomEdge:
175 return (window->height() - point.y()) / q->height();
176 default:
177 return 0;
178 }
179}
180
182{
183 Q_Q(QQuickDrawer);
184 if (!positioner)
186 return positioner;
187}
188
190{
191 if (m_positioning)
192 return;
193
194 QQuickDrawer *drawer = static_cast<QQuickDrawer*>(popup());
195 QQuickWindow *window = drawer->window();
196 if (!window)
197 return;
198
199 const qreal position = drawer->position();
200 QQuickItem *popupItem = drawer->popupItem();
201 switch (drawer->edge()) {
202 case Qt::LeftEdge:
203 popupItem->setX((position - 1.0) * popupItem->width());
204 break;
205 case Qt::RightEdge:
206 popupItem->setX(window->width() - position * popupItem->width());
207 break;
208 case Qt::TopEdge:
209 popupItem->setY((position - 1.0) * popupItem->height());
210 break;
211 case Qt::BottomEdge:
212 popupItem->setY(window->height() - position * popupItem->height());
213 break;
214 }
215
217}
218
220{
221 // managed in setPosition()
222}
223
225{
226 // managed in setPosition()
227}
228
230{
231 if (!dimmer || !window)
232 return;
233
234 QRectF geometry(0, 0, window->width(), window->height());
235
236 if (edge == Qt::LeftEdge || edge == Qt::RightEdge) {
237 geometry.setY(popupItem->y());
238 geometry.setHeight(popupItem->height());
239 } else {
240 geometry.setX(popupItem->x());
241 geometry.setWidth(popupItem->width());
242 }
243
244 dimmer->setPosition(geometry.topLeft());
245 dimmer->setSize(geometry.size());
246}
247
248static bool isWithinDragMargin(const QQuickDrawer *drawer, const QPointF &pos)
249{
250 switch (drawer->edge()) {
251 case Qt::LeftEdge:
252 return pos.x() <= drawer->dragMargin();
253 case Qt::RightEdge:
254 return pos.x() >= drawer->window()->width() - drawer->dragMargin();
255 case Qt::TopEdge:
256 return pos.y() <= drawer->dragMargin();
257 case Qt::BottomEdge:
258 return pos.y() >= drawer->window()->height() - drawer->dragMargin();
259 default:
260 Q_UNREACHABLE();
261 break;
262 }
263 return false;
264}
265
267{
268 Q_Q(QQuickDrawer);
271 return false;
272
273 switch (event->type()) {
275 if (QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event); isWithinDragMargin(q, mouseEvent->scenePosition())) {
276 // watch future events and grab the mouse once it has moved
277 // sufficiently fast or far (in grabMouse).
279 mouseEvent->addPassiveGrabber(mouseEvent->point(0), popupItem);
280 handleMouseEvent(window->contentItem(), mouseEvent);
281 return false;
282 }
283 break;
284
285#if QT_CONFIG(quicktemplates2_multitouch)
287 case QEvent::TouchUpdate: {
288 auto *touchEvent = static_cast<QTouchEvent *>(event);
289 for (const QTouchEvent::TouchPoint &point : touchEvent->points()) {
290 if (point.state() == QEventPoint::Pressed && isWithinDragMargin(q, point.scenePosition())) {
292 touchEvent->addPassiveGrabber(point, popupItem);
293 handleTouchEvent(window->contentItem(), touchEvent);
294 return false;
295 }
296 }
297 break;
298 }
299#endif
300
301 default:
302 break;
303 }
304
305 return false;
306}
307
308static inline bool keepGrab(QQuickItem *item)
309{
310 return item->keepMouseGrab() || item->keepTouchGrab();
311}
312
314{
315 Q_Q(QQuickDrawer);
317
319 return false;
320
321 const QPointF movePoint = event->scenePosition();
322
323 // Flickable uses a hard-coded threshold of 15 for flicking, and
324 // QStyleHints::startDragDistance for dragging. Drawer uses a bit
325 // larger threshold to avoid being too eager to steal touch (QTBUG-50045)
326 const int threshold = qMax(20, QGuiApplication::styleHints()->startDragDistance() + 5);
327 bool overThreshold = false;
328 if (position > 0 || dragMargin > 0) {
329 const bool xOverThreshold = QQuickWindowPrivate::dragOverThreshold(movePoint.x() - pressPoint.x(), Qt::XAxis, event, threshold);
330 const bool yOverThreshold = QQuickWindowPrivate::dragOverThreshold(movePoint.y() - pressPoint.y(), Qt::YAxis, event, threshold);
331 if (edge == Qt::LeftEdge || edge == Qt::RightEdge)
332 overThreshold = xOverThreshold && !yOverThreshold;
333 else
334 overThreshold = yOverThreshold && !xOverThreshold;
335 }
336
337 // Don't be too eager to steal presses outside the drawer (QTBUG-53929)
338 if (overThreshold && qFuzzyCompare(position, qreal(1.0)) && !contains(movePoint)) {
339 if (edge == Qt::LeftEdge || edge == Qt::RightEdge)
340 overThreshold = qAbs(movePoint.x() - q->width()) < dragMargin;
341 else
342 overThreshold = qAbs(movePoint.y() - q->height()) < dragMargin;
343 }
344
345 if (overThreshold) {
348 reposition();
350 }
351
354 offset = offsetAt(movePoint);
355 }
356
357 return overThreshold;
358}
359
360#if QT_CONFIG(quicktemplates2_multitouch)
361bool QQuickDrawerPrivate::grabTouch(QQuickItem *item, QTouchEvent *event)
362{
363 Q_Q(QQuickDrawer);
364 bool handled = handleTouchEvent(item, event);
365
366 if (!window || !interactive || keepGrab(popupItem) || keepGrab(item) || !event->touchPointStates().testFlag(QEventPoint::Updated))
367 return handled;
368
369 bool overThreshold = false;
370 for (const QTouchEvent::TouchPoint &point : event->points()) {
371 if (!acceptTouch(point) || point.state() != QEventPoint::Updated)
372 continue;
373
374 const QPointF movePoint = point.scenePosition();
375
376 // Flickable uses a hard-coded threshold of 15 for flicking, and
377 // QStyleHints::startDragDistance for dragging. Drawer uses a bit
378 // larger threshold to avoid being too eager to steal touch (QTBUG-50045)
379 const int threshold = qMax(20, QGuiApplication::styleHints()->startDragDistance() + 5);
380 if (position > 0 || dragMargin > 0) {
381 const bool xOverThreshold = QQuickWindowPrivate::dragOverThreshold(movePoint.x() - pressPoint.x(), Qt::XAxis, &point, threshold);
382 const bool yOverThreshold = QQuickWindowPrivate::dragOverThreshold(movePoint.y() - pressPoint.y(), Qt::YAxis, &point, threshold);
383 if (edge == Qt::LeftEdge || edge == Qt::RightEdge)
384 overThreshold = xOverThreshold && !yOverThreshold;
385 else
386 overThreshold = yOverThreshold && !xOverThreshold;
387 }
388
389 // Don't be too eager to steal presses outside the drawer (QTBUG-53929)
390 if (overThreshold && qFuzzyCompare(position, qreal(1.0)) && !contains(movePoint)) {
391 if (edge == Qt::LeftEdge || edge == Qt::RightEdge)
392 overThreshold = qAbs(movePoint.x() - q->width()) < dragMargin;
393 else
394 overThreshold = qAbs(movePoint.y() - q->height()) < dragMargin;
395 }
396
397 if (overThreshold) {
400 reposition();
402 }
403 event->setExclusiveGrabber(point, popupItem);
405 offset = offsetAt(movePoint);
406 }
407 }
408
409 return overThreshold;
410}
411#endif
412
414
415// Overrides QQuickPopupPrivate::blockInput, which is called by
416// QQuickPopupPrivate::handlePress/Move/Release, which we call in our own
417// handlePress/Move/Release overrides.
418// This implementation conflates two things: should the event going to the item get
419// modally blocked by us? Or should we accept the event and become the grabber?
420// Those are two fundamentally different questions for the drawer as a (usually)
421// interactive control.
423{
424 Q_Q(const QQuickDrawer);
425
426 // We want all events, if mouse/touch is already grabbed.
428 return true;
429
430 // Don't block input to drawer's children/content.
432 return false;
433
434 // Don't block outside a drawer's background dimming
435 if (dimmer && !dimmer->contains(dimmer->mapFromScene(point)))
436 return false;
437
438 // Accept all events within drag area.
439 if (isWithinDragMargin(q, point))
440 return true;
441
442 // Accept all other events if drawer is modal.
443 return modal;
444}
445
447{
448 offset = 0;
449 velocityCalculator.startMeasuring(point, timestamp);
450
451 if (!QQuickPopupPrivate::handlePress(item, point, timestamp))
452 return interactive && popupItem == item;
453
454 return true;
455}
456
458{
459 Q_Q(QQuickDrawer);
460 if (!QQuickPopupPrivate::handleMove(item, point, timestamp))
461 return false;
462
463 // limit/reset the offset to the edge of the drawer when pushed from the outside
464 if (qFuzzyCompare(position, qreal(1.0)) && !contains(point))
465 offset = 0;
466
467 bool isGrabbed = popupItem->keepMouseGrab() || popupItem->keepTouchGrab();
468 if (isGrabbed)
469 q->setPosition(positionAt(point) - offset);
470
471 return isGrabbed;
472}
473
475{
476 auto cleanup = qScopeGuard([this] {
480 touchId = -1;
481 });
482 if (pressPoint.isNull())
483 return false;
486 return QQuickPopupPrivate::handleRelease(item, point, timestamp);
487 }
488
489 velocityCalculator.stopMeasuring(point, timestamp);
490
491 qreal velocity = 0;
492 if (edge == Qt::LeftEdge || edge == Qt::RightEdge)
493 velocity = velocityCalculator.velocity().x();
494 else
495 velocity = velocityCalculator.velocity().y();
496
497 // the velocity is calculated so that swipes from left to right
498 // and top to bottom have positive velocity, and swipes from right
499 // to left and bottom to top have negative velocity.
500 //
501 // - top/left edge: positive velocity opens, negative velocity closes
502 // - bottom/right edge: negative velocity opens, positive velocity closes
503 //
504 // => invert the velocity for bottom and right edges, for the threshold comparison below
506 velocity = -velocity;
507
508 if (position > 0.7 || velocity > openCloseVelocityThreshold) {
510 } else if (position < 0.3 || velocity < -openCloseVelocityThreshold) {
512 } else {
513 switch (edge) {
514 case Qt::LeftEdge:
515 if (point.x() - pressPoint.x() > 0)
517 else
519 break;
520 case Qt::RightEdge:
521 if (point.x() - pressPoint.x() < 0)
523 else
525 break;
526 case Qt::TopEdge:
527 if (point.y() - pressPoint.y() > 0)
529 else
531 break;
532 case Qt::BottomEdge:
533 if (point.y() - pressPoint.y() < 0)
535 else
537 break;
538 }
539 }
540
541 // the cleanup() lambda will run before return
543}
544
546{
548
550}
551
553{
555 if (!transition || !QQuickPopupPrivate::get(drawer)->window || !transition->enabled())
556 return actions;
557
558 qmlExecuteDeferred(transition);
559
560 QQmlProperty defaultTarget(drawer, QLatin1String("position"));
561 QQmlListProperty<QQuickAbstractAnimation> animations = transition->animations();
562 int count = animations.count(&animations);
563 for (int i = 0; i < count; ++i) {
564 QQuickAbstractAnimation *anim = animations.at(&animations, i);
565 anim->setDefaultTarget(defaultTarget);
566 }
567
568 actions << QQuickStateAction(drawer, QLatin1String("position"), to);
569 return actions;
570}
571
573{
574 Q_Q(QQuickDrawer);
577}
578
580{
581 Q_Q(QQuickDrawer);
584}
585
587{
588 Q_Q(QQuickDrawer);
589 switch (e) {
590 case Qt::LeftEdge:
591 case Qt::RightEdge:
592 allowVerticalMove = true;
593 allowVerticalResize = true;
594 allowHorizontalMove = false;
595 allowHorizontalResize = false;
596 break;
597 case Qt::TopEdge:
598 case Qt::BottomEdge:
599 allowVerticalMove = false;
600 allowVerticalResize = false;
601 allowHorizontalMove = true;
603 break;
604 default:
605 qmlWarning(q) << "invalid edge value - valid values are: "
606 << "Qt.TopEdge, Qt.LeftEdge, Qt.RightEdge, Qt.BottomEdge";
607 return false;
608 }
609
610 edge = e;
611 return true;
612}
613
616{
617 Q_D(QQuickDrawer);
619 d->setEdge(Qt::LeftEdge);
620
621 setFocus(true);
622 setModal(true);
623 setFiltersChildMouseEvents(true);
624 setClosePolicy(CloseOnEscape | CloseOnReleaseOutside);
625}
626
639{
640 Q_D(const QQuickDrawer);
641 return d->edge;
642}
643
645{
646 Q_D(QQuickDrawer);
647 if (d->edge == edge)
648 return;
649
650 if (!d->setEdge(edge))
651 return;
652
654 d->reposition();
656}
657
666{
667 Q_D(const QQuickDrawer);
668 return d->position;
669}
670
672{
673 Q_D(QQuickDrawer);
674 position = qBound<qreal>(0.0, position, 1.0);
675 if (qFuzzyCompare(d->position, position))
676 return;
677
678 d->position = position;
680 d->reposition();
681 if (d->dimmer)
682 d->dimmer->setOpacity(position);
684}
685
698{
699 Q_D(const QQuickDrawer);
700 return d->dragMargin;
701}
702
704{
705 Q_D(QQuickDrawer);
706 if (qFuzzyCompare(d->dragMargin, margin))
707 return;
708
709 d->dragMargin = margin;
711}
712
714{
715 setDragMargin(QGuiApplication::styleHints()->startDragDistance());
716}
717
730{
731 Q_D(const QQuickDrawer);
732 return d->interactive;
733}
734
735void QQuickDrawer::setInteractive(bool interactive)
736{
737 Q_D(QQuickDrawer);
738 if (d->interactive == interactive)
739 return;
740
741 setFiltersChildMouseEvents(interactive);
742 d->interactive = interactive;
743 emit interactiveChanged();
744}
745
747{
748 Q_D(QQuickDrawer);
749 switch (event->type()) {
750#if QT_CONFIG(quicktemplates2_multitouch)
752 return d->grabTouch(child, static_cast<QTouchEvent *>(event));
754 case QEvent::TouchEnd:
755 return d->handleTouchEvent(child, static_cast<QTouchEvent *>(event));
756#endif
758 return d->grabMouse(child, static_cast<QMouseEvent *>(event));
761 return d->handleMouseEvent(child, static_cast<QMouseEvent *>(event));
762 default:
763 break;
764 }
765 return false;
766}
767
769{
770 Q_D(QQuickDrawer);
771 d->grabMouse(d->popupItem, event);
772}
773
775{
776 Q_D(QQuickDrawer);
777 switch (event->type()) {
778#if QT_CONFIG(quicktemplates2_multitouch)
780 return d->grabTouch(item, static_cast<QTouchEvent *>(event));
781#endif
783 return d->grabMouse(item, static_cast<QMouseEvent *>(event));
784 default:
785 break;
786 }
788}
789
790#if QT_CONFIG(quicktemplates2_multitouch)
791void QQuickDrawer::touchEvent(QTouchEvent *event)
792{
793 Q_D(QQuickDrawer);
794 d->grabTouch(d->popupItem, event);
795}
796#endif
797
798void QQuickDrawer::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry)
799{
800 Q_D(QQuickDrawer);
801 QQuickPopup::geometryChange(newGeometry, oldGeometry);
802 d->resizeOverlay();
803}
804
806
807#include "moc_qquickdrawer_p.cpp"
The QEventPoint class provides information about a point in a QPointerEvent.
Definition qeventpoint.h:20
\inmodule QtCore
Definition qcoreevent.h:45
@ MouseMove
Definition qcoreevent.h:63
@ MouseButtonPress
Definition qcoreevent.h:60
@ TouchUpdate
Definition qcoreevent.h:242
@ TouchBegin
Definition qcoreevent.h:241
@ MouseButtonRelease
Definition qcoreevent.h:61
static QStyleHints * styleHints()
Returns the application's style hints.
Definition qlist.h:74
\inmodule QtGui
Definition qevent.h:195
\inmodule QtCore
Definition qobject.h:90
\inmodule QtCore\reentrant
Definition qpoint.h:214
constexpr qreal x() const noexcept
Returns the x coordinate of this point.
Definition qpoint.h:333
constexpr qreal y() const noexcept
Returns the y coordinate of this point.
Definition qpoint.h:338
bool isNull() const noexcept
Returns true if both the x and y coordinates are set to 0.0 (ignoring the sign); otherwise returns fa...
Definition qpoint.h:328
The QQmlListProperty class allows applications to expose list-like properties of QObject-derived clas...
Definition qqmllist.h:24
AtFunction at
Definition qqmllist.h:86
CountFunction count
Definition qqmllist.h:85
The QQmlProperty class abstracts accessing properties on objects created from QML.
void setDefaultTarget(const QQmlProperty &)
Side panel that can be opened and closed using a swipe gesture.
void reposition() override
QQuickDrawerPositioner(QQuickDrawer *drawer)
void handleUngrab() override
void hideOverlay() override
bool prepareEnterTransition() override
bool handlePress(QQuickItem *item, const QPointF &point, ulong timestamp) override
bool setEdge(Qt::Edge edge)
qreal positionAt(const QPointF &point) const
QQuickPopupPositioner * getPositioner() override
void resizeOverlay() override
bool grabMouse(QQuickItem *item, QMouseEvent *event)
bool handleRelease(QQuickItem *item, const QPointF &point, ulong timestamp) override
bool startDrag(QEvent *event)
qreal offsetAt(const QPointF &point) const
bool blockInput(QQuickItem *item, const QPointF &point) const override
bool handleMove(QQuickItem *item, const QPointF &point, ulong timestamp) override
bool prepareExitTransition() override
void showOverlay() override
QQuickVelocityCalculator velocityCalculator
void setEdge(Qt::Edge edge)
void setPosition(qreal position)
void setDragMargin(qreal margin)
bool overlayEvent(QQuickItem *item, QEvent *event) override
QQuickDrawer(QObject *parent=nullptr)
void resetDragMargin()
void dragMarginChanged()
bool childMouseEventFilter(QQuickItem *child, QEvent *event) override
void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override
void positionChanged()
void setInteractive(bool interactive)
bool isInteractive() const
void mouseMoveEvent(QMouseEvent *event) override
void edgeChanged()
The QQuickItem class provides the most basic of all visual items in \l {Qt Quick}.
Definition qquickitem.h:64
void setKeepTouchGrab(bool)
Sets whether the touch points grabbed by this item should remain exclusively with this item.
void setSize(const QSizeF &size)
qreal x
\qmlproperty real QtQuick::Item::x \qmlproperty real QtQuick::Item::y \qmlproperty real QtQuick::Item...
Definition qquickitem.h:73
QPointF mapFromScene(const QPointF &point) const
Maps the given point in the scene's coordinate system to the equivalent point within this item's coor...
qreal y
Defines the item's y position relative to its parent.
Definition qquickitem.h:74
virtual Q_INVOKABLE bool contains(const QPointF &point) const
\qmlmethod bool QtQuick::Item::contains(point point)
bool keepTouchGrab() const
Returns whether the touch points grabbed by this item should exclusively remain with this item.
qreal width
This property holds the width of this item.
Definition qquickitem.h:76
bool keepMouseGrab() const
Returns whether mouse input should exclusively remain with this item.
void setKeepMouseGrab(bool)
Sets whether the mouse input should remain exclusively with this item.
void grabMouse()
qreal height
This property holds the height of this item.
Definition qquickitem.h:77
void setPosition(const QPointF &)
void setX(qreal)
bool isAncestorOf(const QQuickItem *child) const
Returns true if this item is an ancestor of child (i.e., if this item is child's parent,...
void setY(qreal)
QQuickPopup * popup() const
virtual bool handlePress(QQuickItem *item, const QPointF &point, ulong timestamp)
bool handleMouseEvent(QQuickItem *item, QMouseEvent *event)
virtual bool handleMove(QQuickItem *item, const QPointF &point, ulong timestamp)
QList< QQuickStateAction > enterActions
virtual bool handleRelease(QQuickItem *item, const QPointF &point, ulong timestamp)
QQuickTransition * enter
QQuickPopupPositioner * positioner
QPointer< QQuickWindow > window
QList< QQuickStateAction > exitActions
virtual void handleUngrab()
bool contains(const QPointF &scenePos) const
QQuickTransition * exit
QQuickPopupItem * popupItem
QQuickPopupTransitionManager transitionManager
virtual bool prepareExitTransition()
virtual bool prepareEnterTransition()
static QQuickPopupPrivate * get(QQuickPopup *popup)
virtual void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry)
virtual bool overlayEvent(QQuickItem *item, QEvent *event)
bool isComponentComplete() const
QQmlListProperty< QQuickAbstractAnimation > animations
\qmlproperty list<Animation> QtQuick::Transition::animations \qmldefault
void startMeasuring(const QPointF &point1, qint64 timestamp=0)
void stopMeasuring(const QPointF &m_point2, qint64 timestamp=0)
static bool dragOverThreshold(qreal d, Qt::Axis axis, const QEventPoint *tp, int startDragThreshold=-1)
\qmltype Window \instantiates QQuickWindow \inqmlmodule QtQuick
QQuickItem * contentItem
\qmlattachedproperty Item Window::contentItem
\inmodule QtCore\reentrant
Definition qrect.h:483
constexpr void setY(qreal pos) noexcept
Sets the top edge of the rectangle to the given finite y coordinate.
Definition qrect.h:508
constexpr void setWidth(qreal w) noexcept
Sets the width of the rectangle to the given finite width.
Definition qrect.h:804
constexpr QPointF topLeft() const noexcept
Returns the position of the rectangle's top-left corner.
Definition qrect.h:510
constexpr QSizeF size() const noexcept
Returns the size of the rectangle.
Definition qrect.h:721
constexpr void setHeight(qreal h) noexcept
Sets the height of the rectangle to the given finite height.
Definition qrect.h:807
constexpr void setX(qreal pos) noexcept
Sets the left edge of the rectangle to the given finite x coordinate.
Definition qrect.h:507
int startDragDistance
the distance, in pixels, that the mouse must be moved with a button held down before a drag and drop ...
Definition qstylehints.h:39
QMap< int, QEventPoint > points
The QTouchEvent class contains parameters that describe a touch event.
Definition qevent.h:916
int width
the width of the window's geometry
Definition qwindow.h:82
int height
the height of the window's geometry
Definition qwindow.h:83
double e
Combined button and popup list for selecting options.
@ RightEdge
@ TopEdge
@ BottomEdge
@ LeftEdge
@ XAxis
@ YAxis
bool qFuzzyCompare(qfloat16 p1, qfloat16 p2) noexcept
Definition qfloat16.h:287
bool qFuzzyIsNull(qfloat16 f) noexcept
Definition qfloat16.h:303
constexpr const T & qMax(const T &a, const T &b)
Definition qminmax.h:42
constexpr T qAbs(const T &t)
Definition qnumeric.h:328
GLenum GLenum GLsizei count
GLenum GLuint GLintptr offset
struct _cl_event * event
GLfixed GLfixed GLint GLint GLfixed points
GLdouble GLdouble GLdouble GLdouble q
Definition qopenglext.h:259
void qmlExecuteDeferred(QObject *object)
Definition qqml.cpp:48
Q_QML_EXPORT QQmlInfo qmlWarning(const QObject *me)
static qreal position(const QQuickItem *item, QQuickAnchors::Anchor anchorLine)
static const qreal openCloseVelocityThreshold
static bool isWithinDragMargin(const QQuickDrawer *drawer, const QPointF &pos)
static bool keepGrab(QQuickItem *item)
static QList< QQuickStateAction > prepareTransition(QQuickDrawer *drawer, QQuickTransition *transition, qreal to)
QScopeGuard< typename std::decay< F >::type > qScopeGuard(F &&f)
[qScopeGuard]
Definition qscopeguard.h:60
QLatin1StringView QLatin1String
Definition qstringfwd.h:31
#define emit
unsigned long ulong
Definition qtypes.h:30
double qreal
Definition qtypes.h:92
QGraphicsItem * item
QLayoutItem * child
[0]
aWidget window() -> setWindowTitle("New Window Title")
[2]
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent