Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qquickoverlay.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 "qquickcontrol_p_p.h"
5#include "qquickoverlay_p.h"
6#include "qquickoverlay_p_p.h"
8#include "qquickpopup_p_p.h"
9#include "qquickdrawer_p.h"
10#include "qquickdrawer_p_p.h"
12#include <QtGui/qpainterpath.h>
13#include <QtQml/qqmlinfo.h>
14#include <QtQml/qqmlproperty.h>
15#include <QtQml/qqmlcomponent.h>
16#include <algorithm>
17
19
24
41{
42 const QList<QQuickItem *> children = paintOrderChildItems();
43
44 QList<QQuickPopup *> popups;
45 popups.reserve(children.size());
46
47 for (auto it = children.crbegin(), end = children.crend(); it != end; ++it) {
48 QQuickPopup *popup = qobject_cast<QQuickPopup *>((*it)->parent());
49 if (popup)
50 popups += popup;
51 }
52
53 return popups;
54}
55
57{
58 QList<QQuickPopup *> sorted(allDrawers);
59 std::sort(sorted.begin(), sorted.end(), [](const QQuickPopup *one, const QQuickPopup *another) {
60 return one->z() > another->z();
61 });
62 return sorted;
63}
64
69
74
76{
77 Q_Q(QQuickOverlay);
78 if (allDrawers.isEmpty())
79 return false;
80
81 // don't start dragging a drawer if a modal popup overlay is blocking (QTBUG-60602)
82 QQuickItem *item = q->childAt(pos.x(), pos.y());
83 if (item) {
84 const auto popups = stackingOrderPopups();
85 for (QQuickPopup *popup : popups) {
87 if (p->dimmer == item && popup->isVisible() && popup->isModal())
88 return false;
89 }
90 }
91
92 const QList<QQuickPopup *> drawers = stackingOrderDrawers();
93 for (QQuickPopup *popup : drawers) {
94 QQuickDrawer *drawer = qobject_cast<QQuickDrawer *>(popup);
95 Q_ASSERT(drawer);
97 if (p->startDrag(event)) {
99 return true;
100 }
101 }
102
103 return false;
104}
105
107{
108 if (target) {
109 if (target->overlayEvent(source, event)) {
111 return true;
112 }
113 return false;
114 }
115
116 switch (event->type()) {
117 default: {
119 break;
120#if QT_CONFIG(quicktemplates2_multitouch)
124 case QEvent::TouchEnd:
125#endif
126 // allow non-modal popups to close themselves,
127 // and non-dimming modal popups to block the event
128 const auto popups = stackingOrderPopups();
129 for (QQuickPopup *popup : popups) {
130 if (popup->overlayEvent(source, event)) {
132 return true;
133 }
134 }
135 break;
136 }
137 }
138
139 event->ignore();
140 return false;
141}
142
144{
145 if (target)
146 return target->overlayEvent(source, event);
147 return false;
148}
149
151{
152 if (target) {
153 setMouseGrabberPopup(nullptr);
154 if (target->overlayEvent(source, event)) {
155 setMouseGrabberPopup(nullptr);
156 return true;
157 }
158 } else {
159 const auto popups = stackingOrderPopups();
160 for (QQuickPopup *popup : popups) {
161 if (popup->overlayEvent(source, event))
162 return true;
163 }
164 }
165 return false;
166}
167
169{
170 switch (event->type()) {
172 if (!target && startDrag(event, event->scenePosition()))
173 return true;
174 return handlePress(source, event, target);
179 default:
180 break;
181 }
182 return false;
183}
184
186{
187 switch (event->type()) {
191 if (target)
192 return target->overlayEvent(source, event);
193 return false;
194 default:
195 Q_UNREACHABLE(); // function must only be called on hover events
196 break;
197 }
198 return false;
199}
200
201#if QT_CONFIG(quicktemplates2_multitouch)
202bool QQuickOverlayPrivate::handleTouchEvent(QQuickItem *source, QTouchEvent *event, QQuickPopup *target)
203{
204 bool handled = false;
205 switch (event->type()) {
208 case QEvent::TouchEnd:
209 for (const QTouchEvent::TouchPoint &point : event->points()) {
210 switch (point.state()) {
212 if (!target && startDrag(event, point.scenePosition()))
213 handled = true;
214 else
215 handled |= handlePress(source, event, target);
216 break;
219 break;
222 break;
223 default:
224 break;
225 }
226 }
227 break;
228
229 default:
230 break;
231 }
232
233 return handled;
234}
235#endif
236
238{
239 Q_Q(QQuickOverlay);
240 allPopups += popup;
241 if (QQuickDrawer *drawer = qobject_cast<QQuickDrawer *>(popup)) {
242 allDrawers += drawer;
243 q->setVisible(!allDrawers.isEmpty() || !q->childItems().isEmpty());
244 }
245}
246
248{
249 Q_Q(QQuickOverlay);
250 allPopups.removeOne(popup);
251 if (allDrawers.removeOne(popup))
252 q->setVisible(!allDrawers.isEmpty() || !q->childItems().isEmpty());
253}
254
256{
257 if (popup && !popup->isVisible())
258 popup = nullptr;
259 mouseGrabberPopup = popup;
260}
261
263{
264 Q_Q(QQuickOverlay);
265 if (!window || !window->contentItem())
266 return;
267
268 const QSizeF size = window->contentItem()->size();
269 const QPointF pos(-(size.width() - window->size().width()) / 2,
270 -(size.height() - window->size().height()) / 2);
271
272 q->setSize(size);
273 q->setPosition(pos);
274}
275
277 : QQuickItem(*(new QQuickOverlayPrivate), parent)
278{
279 Q_D(QQuickOverlay);
280 setZ(1000001); // DefaultWindowDecoration+1
282#if QT_CONFIG(quicktemplates2_multitouch)
284#endif
286 setVisible(false);
287
288 if (parent) {
289 d->updateGeometry();
291 if (QQuickWindow *window = parent->window()) {
293 if (QQuickItem *contentItem = window->contentItem())
294 QQuickItemPrivate::get(contentItem)->addItemChangeListener(d, QQuickItemPrivate::Rotation);
295 }
296 }
297}
298
300{
301 Q_D(QQuickOverlay);
302 if (QQuickItem *parent = parentItem()) {
303 QQuickItemPrivate::get(parent)->removeItemChangeListener(d, QQuickItemPrivate::Geometry);
304 if (QQuickWindow *window = parent->window()) {
305 if (QQuickItem *contentItem = window->contentItem())
306 QQuickItemPrivate::get(contentItem)->removeItemChangeListener(d, QQuickItemPrivate::Rotation);
307 }
308 }
309}
310
312{
313 Q_D(const QQuickOverlay);
314 return d->modal;
315}
316
318{
319 Q_D(QQuickOverlay);
320 if (d->modal == modal)
321 return;
322
323 d->modal = modal;
325}
326
328{
329 Q_D(const QQuickOverlay);
330 return d->modeless;
331}
332
334{
335 Q_D(QQuickOverlay);
336 if (d->modeless == modeless)
337 return;
338
339 d->modeless = modeless;
341}
342
344{
345 if (!window)
346 return nullptr;
347
348 const char *name = "_q_QQuickOverlay";
350 if (!overlay) {
351 QQuickItem *content = window->contentItem();
352 // Do not re-create the overlay if the window is being destroyed
353 // and thus, its content item no longer has a window associated.
354 if (content && content->window()) {
357 }
358 }
359 return overlay;
360}
361
366
368{
369 Q_D(QQuickOverlay);
371
372 if (change == ItemChildAddedChange || change == ItemChildRemovedChange) {
373 setVisible(!d->allDrawers.isEmpty() || !childItems().isEmpty());
374 if (data.item->parent() == d->mouseGrabberPopup)
375 d->setMouseGrabberPopup(nullptr);
376 }
377}
378
379void QQuickOverlay::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry)
380{
381 Q_D(QQuickOverlay);
382 QQuickItem::geometryChange(newGeometry, oldGeometry);
383 for (QQuickPopup *popup : std::as_const(d->allPopups))
384 QQuickPopupPrivate::get(popup)->resizeDimmer();
385}
386
388{
389 Q_D(QQuickOverlay);
390 d->handleMouseEvent(this, event);
391}
392
394{
395 Q_D(QQuickOverlay);
396 d->handleMouseEvent(this, event);
397}
398
400{
401 Q_D(QQuickOverlay);
402 d->handleMouseEvent(this, event);
403}
404
405#if QT_CONFIG(quicktemplates2_multitouch)
407{
408 Q_D(QQuickOverlay);
409 d->handleTouchEvent(this, event);
410}
411#endif
412
413#if QT_CONFIG(wheelevent)
414void QQuickOverlay::wheelEvent(QWheelEvent *event)
415{
416 Q_D(QQuickOverlay);
417 if (d->mouseGrabberPopup) {
418 d->mouseGrabberPopup->overlayEvent(this, event);
419 return;
420 } else {
421 const auto popups = d->stackingOrderPopups();
422 for (QQuickPopup *popup : popups) {
423 if (popup->overlayEvent(this, event))
424 return;
425 }
426 }
427 event->ignore();
428}
429#endif
430
432{
433 Q_D(QQuickOverlay);
434 const auto popups = d->stackingOrderPopups();
435 for (QQuickPopup *popup : popups) {
437
438 // Stop filtering overlay events when reaching a popup item or an item
439 // that is inside the popup. Let the popup content handle its events.
440 if (item == p->popupItem || p->popupItem->isAncestorOf(item))
441 break;
442
443 // Let the popup try closing itself when pressing or releasing over its
444 // background dimming OR over another popup underneath, in case the popup
445 // does not have background dimming.
446 if (item == p->dimmer || !p->popupItem->isAncestorOf(item)) {
447 bool handled = false;
448 switch (event->type()) {
449#if QT_CONFIG(quicktemplates2_multitouch)
452 case QEvent::TouchEnd:
453 handled = d->handleTouchEvent(item, static_cast<QTouchEvent *>(event), popup);
454 break;
455#endif
459 handled = d->handleHoverEvent(item, static_cast<QHoverEvent *>(event), popup);
460 break;
461
465 handled = d->handleMouseEvent(item, static_cast<QMouseEvent *>(event), popup);
466 break;
467
468 default:
469 break;
470 }
471 if (handled)
472 return true;
473 }
474 }
475 return false;
476}
477
479{
480 Q_D(QQuickOverlay);
481 if (!isVisible() || object != d->window)
482 return false;
483
484 switch (event->type()) {
485#if QT_CONFIG(quicktemplates2_multitouch)
488 case QEvent::TouchEnd:
489 if (static_cast<QTouchEvent *>(event)->touchPointStates() & QEventPoint::Pressed)
490 emit pressed();
491 if (static_cast<QTouchEvent *>(event)->touchPointStates() & QEventPoint::Released)
492 emit released();
493
494 // allow non-modal popups to close on touch release outside
495 if (!d->mouseGrabberPopup) {
496 for (const QTouchEvent::TouchPoint &point : static_cast<QTouchEvent *>(event)->points()) {
497 if (point.state() == QEventPoint::Released) {
498 if (d->handleRelease(d->window->contentItem(), event, nullptr))
499 break;
500 }
501 }
502 }
503
504 // setup currentEventDeliveryAgent like in QQuickDeliveryAgent::event
506 d->deliveryAgentPrivate()->handleTouchEvent(static_cast<QTouchEvent *>(event));
508
509 // If a touch event hasn't been accepted after being delivered, there
510 // were no items interested in touch events at any of the touch points.
511 // Make sure to accept the touch event in order to receive the consequent
512 // touch events, to be able to close non-modal popups on release outside.
513 event->accept();
514 // Since we eat the event, QQuickWindow::event never sees it to clean up the
515 // grabber states. So we have to do so explicitly.
516 if (QQuickWindow *window = parentItem() ? parentItem()->window() : nullptr) {
518 d->clearGrabbers(static_cast<QPointerEvent *>(event));
519 }
520 return true;
521#endif
522
524#if QT_CONFIG(quicktemplates2_multitouch)
525 // do not emit pressed() twice when mouse events have been synthesized from touch events
526 if (static_cast<QMouseEvent *>(event)->source() == Qt::MouseEventNotSynthesized)
527#endif
528 emit pressed();
529
530 // setup currentEventDeliveryAgent like in QQuickDeliveryAgent::event
532 d->deliveryAgentPrivate()->handleMouseEvent(static_cast<QMouseEvent *>(event));
534
535 // If a mouse event hasn't been accepted after being delivered, there
536 // was no item interested in mouse events at the mouse point. Make sure
537 // to accept the mouse event in order to receive the consequent mouse
538 // events, to be able to close non-modal popups on release outside.
539 event->accept();
540 return true;
541
543#if QT_CONFIG(quicktemplates2_multitouch)
544 // do not emit released() twice when mouse events have been synthesized from touch events
545 if (static_cast<QMouseEvent *>(event)->source() == Qt::MouseEventNotSynthesized)
546#endif
547 emit released();
548
549 // allow non-modal popups to close on mouse release outside
550 if (!d->mouseGrabberPopup)
551 d->handleRelease(d->window->contentItem(), event, nullptr);
552 break;
553
554#if QT_CONFIG(wheelevent)
555 case QEvent::Wheel: {
556 // If the top item in the drawing-order is blocked by a modal popup, then
557 // eat the event. There is no scenario where the top most item is blocked
558 // by a popup, but an item further down in the drawing order is not.
559 QWheelEvent *we = static_cast<QWheelEvent *>(event);
560 const QVector<QQuickItem *> targetItems = d->deliveryAgentPrivate()->pointerTargets(
561 d->window->contentItem(), we, we->point(0), false, false);
562 if (targetItems.isEmpty())
563 break;
564
565 QQuickItem * const dimmerItem = property("_q_dimmerItem").value<QQuickItem *>();
566 QQuickItem * const topItem = targetItems.first();
567
568 QQuickItem *item = topItem;
569 while ((item = item->parentItem())) {
570 if (qobject_cast<QQuickPopupItem *>(item))
571 break;
572 }
573
574 if (!item && dimmerItem != topItem && isAncestorOf(topItem))
575 break;
576
577 const auto popups = d->stackingOrderPopups();
578 // Eat the event if receiver topItem is not a child of a popup before
579 // the first modal popup.
580 for (const auto &popup : popups) {
581 const QQuickItem *popupItem = popup->popupItem();
582 if (!popupItem)
583 continue;
584 // if current popup item matches with any popup in stack, deliver the event
585 if (popupItem == item)
586 break;
587 // if the popup doesn't contain the item but is modal, eat the event
588 if (popup->overlayEvent(topItem, we))
589 return true;
590 }
591 break;
592 }
593#endif
594
595 default:
596 break;
597 }
598
599 return false;
600}
601
603{
604public:
605 Q_DECLARE_PUBLIC(QQuickOverlayAttached)
606
607 void setWindow(QQuickWindow *newWindow);
608
612};
613
615{
617 if (window == newWindow)
618 return;
619
620 if (QQuickOverlay *oldOverlay = QQuickOverlay::overlay(window)) {
623 }
624
625 if (QQuickOverlay *newOverlay = QQuickOverlay::overlay(newWindow)) {
628 }
629
630 window = newWindow;
631 emit q->overlayChanged();
632}
633
655 : QObject(*(new QQuickOverlayAttachedPrivate), parent)
656{
658 if (QQuickItem *item = qobject_cast<QQuickItem *>(parent)) {
659 d->setWindow(item->window());
661 } else if (QQuickPopup *popup = qobject_cast<QQuickPopup *>(parent)) {
662 d->setWindow(popup->window());
664 } else {
665 d->setWindow(qobject_cast<QQuickWindow *>(parent));
666 }
667}
668
679{
680 Q_D(const QQuickOverlayAttached);
681 return QQuickOverlay::overlay(d->window);
682}
683
701{
702 Q_D(const QQuickOverlayAttached);
703 return d->modal;
704}
705
707{
709 if (d->modal == modal)
710 return;
711
712 d->modal = modal;
714}
715
733{
734 Q_D(const QQuickOverlayAttached);
735 return d->modeless;
736}
737
739{
741 if (d->modeless == modeless)
742 return;
743
744 d->modeless = modeless;
746}
747
749
750#include "moc_qquickoverlay_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
@ HoverLeave
Definition qcoreevent.h:176
@ HoverEnter
Definition qcoreevent.h:175
@ HoverMove
Definition qcoreevent.h:177
@ MouseButtonRelease
Definition qcoreevent.h:61
QGraphicsWidget * window() const
QGraphicsItem * parentItem() const
Returns a pointer to this item's parent item.
bool isVisible() const
Returns true if the item is visible; otherwise, false is returned.
bool isAncestorOf(const QGraphicsItem *child) const
Returns true if this item is an ancestor of child (i.e., if this item is child's parent,...
\inmodule QtGui
Definition qevent.h:246
bool isEmpty() const noexcept
Definition qlist.h:401
bool removeOne(const AT &t)
Definition qlist.h:598
\inmodule QtGui
Definition qevent.h:196
static QMetaObject::Connection connect(const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::FunctionPointer< Func2 >::Object *receiverPrivate, Func2 slot, Qt::ConnectionType type=Qt::AutoConnection)
Definition qobject_p.h:299
\inmodule QtCore
Definition qobject.h:103
void installEventFilter(QObject *filterObj)
Installs an event filter filterObj on this object.
Definition qobject.cpp:2339
QObject * parent() const
Returns a pointer to the parent object.
Definition qobject.h:346
static QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection)
\threadsafe
Definition qobject.cpp:2960
static bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *member)
\threadsafe
Definition qobject.cpp:3236
QVariant property(const char *name) const
Returns the value of the object's name property.
Definition qobject.cpp:4323
bool setProperty(const char *name, const QVariant &value)
Sets the value of the object's name property to value.
\inmodule QtCore\reentrant
Definition qpoint.h:217
A base class for pointer events.
Definition qevent.h:73
T * data() const noexcept
Definition qpointer.h:73
The QQmlComponent class encapsulates a QML component definition.
static QQuickDeliveryAgent * currentEventDeliveryAgent
static QQuickDrawerPrivate * get(QQuickDrawer *drawer)
QList< QQuickItem * > paintOrderChildItems() const
QQuickWindow * window
QQmlListProperty< QQuickItem > children()
static QQuickItemPrivate * get(QQuickItem *item)
The QQuickItem class provides the most basic of all visual items in \l {Qt Quick}.
Definition qquickitem.h:63
void setFiltersChildMouseEvents(bool filter)
Sets whether pointer events intended for this item's children should be filtered through this item.
QList< QQuickItem * > childItems() const
Returns the children of this item.
virtual void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry)
void setAcceptTouchEvents(bool accept)
If enabled is true, this sets the item to accept touch events; otherwise, touch events are not accept...
bool isVisible() const
void setAcceptedMouseButtons(Qt::MouseButtons buttons)
Sets the mouse buttons accepted by this item to buttons.
QSizeF size() const
QQuickWindow * window() const
Returns the window in which this item is rendered.
QQuickItem * parentItem() const
void setVisible(bool)
virtual void itemChange(ItemChange, const ItemChangeData &)
Called when change occurs for this item.
QQuickItem * parent
\qmlproperty Item QtQuick::Item::parent This property holds the visual parent of the item.
Definition qquickitem.h:67
virtual void touchEvent(QTouchEvent *event)
This event handler can be reimplemented in a subclass to receive touch events for an item.
void setZ(qreal)
ItemChange
Used in conjunction with QQuickItem::itemChange() to notify the item about certain types of changes.
Definition qquickitem.h:144
@ ItemChildAddedChange
Definition qquickitem.h:145
@ ItemChildRemovedChange
Definition qquickitem.h:146
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 setWindow(QQuickWindow *newWindow)
QQmlComponent * modeless
QQmlComponent * modal
QQuickOverlay * overlay
void setModal(QQmlComponent *modal)
void setModeless(QQmlComponent *modeless)
QQuickOverlayAttached(QObject *parent=nullptr)
\qmlattachedsignal QtQuick.Controls::Overlay::pressed()
QList< QQuickPopup * > stackingOrderPopups() const
A window overlay for popups.
QList< QQuickPopup * > stackingOrderDrawers() const
void itemRotationChanged(QQuickItem *item) override
void setMouseGrabberPopup(QQuickPopup *popup)
QList< QQuickPopup * > allDrawers
bool startDrag(QEvent *event, const QPointF &pos)
QPointer< QQuickPopup > mouseGrabberPopup
QList< QQuickPopup * > allPopups
bool handleMouseEvent(QQuickItem *source, QMouseEvent *event, QQuickPopup *target=nullptr)
void itemGeometryChanged(QQuickItem *item, QQuickGeometryChange change, const QRectF &diff) override
void removePopup(QQuickPopup *popup)
bool handleRelease(QQuickItem *source, QEvent *event, QQuickPopup *target)
bool handlePress(QQuickItem *source, QEvent *event, QQuickPopup *target)
void addPopup(QQuickPopup *popup)
bool handleMove(QQuickItem *source, QEvent *event, QQuickPopup *target)
bool handleHoverEvent(QQuickItem *source, QHoverEvent *event, QQuickPopup *target=nullptr)
static QQuickOverlay * overlay(QQuickWindow *window)
void setModal(QQmlComponent *modal)
void mouseMoveEvent(QMouseEvent *event) override
This event handler can be reimplemented in a subclass to receive mouse move events for an item.
static QQuickOverlayAttached * qmlAttachedProperties(QObject *object)
void modalChanged()
void mouseReleaseEvent(QMouseEvent *event) override
This event handler can be reimplemented in a subclass to receive mouse release events for an item.
void setModeless(QQmlComponent *modeless)
QQmlComponent * modeless
void modelessChanged()
bool childMouseEventFilter(QQuickItem *item, QEvent *event) override
Reimplement this method to filter the pointer events that are received by this item's children.
void mousePressEvent(QMouseEvent *event) override
This event handler can be reimplemented in a subclass to receive mouse press events for an item.
bool eventFilter(QObject *object, QEvent *event) override
Filters events if this object has been installed as an event filter for the watched object.
QQuickOverlay(QQuickItem *parent=nullptr)
QQmlComponent * modal
void itemChange(ItemChange change, const ItemChangeData &data) override
Called when change occurs for this item.
void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override
static QQuickPopupPrivate * get(QQuickPopup *popup)
void windowChanged(QQuickWindow *window)
static QQuickWindowPrivate * get(QQuickWindow *c)
\qmltype Window \instantiates QQuickWindow \inqmlmodule QtQuick
QQuickItem * contentItem
\qmlattachedproperty Item Window::contentItem
\inmodule QtCore\reentrant
Definition qrect.h:484
\inmodule QtCore
Definition qsize.h:208
The QTouchEvent class contains parameters that describe a touch event.
Definition qevent.h:917
T value() const &
Definition qvariant.h:516
static auto fromValue(T &&value) noexcept(std::is_nothrow_copy_constructible_v< T > &&Private::CanUseInternalSpace< T >) -> std::enable_if_t< std::conjunction_v< std::is_copy_constructible< T >, std::is_destructible< T > >, QVariant >
Definition qvariant.h:536
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
QSet< QString >::iterator it
Combined button and popup list for selecting options.
@ AllButtons
Definition qnamespace.h:90
@ MouseEventNotSynthesized
#define Q_FALLTHROUGH()
GLenum GLuint GLintptr GLsizeiptr size
[1]
GLuint GLuint end
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum target
GLuint name
GLsizei GLsizei GLchar * source
struct _cl_event * event
GLfixed GLfixed GLint GLint GLfixed points
GLdouble GLdouble GLdouble GLdouble q
Definition qopenglext.h:259
GLfloat GLfloat p
[1]
#define Q_ASSERT(cond)
Definition qrandom.cpp:47
#define emit
const char property[13]
Definition qwizard.cpp:101
QGraphicsItem * item
aWidget window() -> setWindowTitle("New Window Title")
[2]
\inmodule QtQuick
Definition qquickitem.h:159