219 #include <QtCore/qdebug.h>
220 #include <QtCore/qlist.h>
221 #include <QtCore/qmath.h>
222 #include <QtCore/qrect.h>
223 #include <QtCore/qset.h>
224 #include <QtCore/qstack.h>
225 #include <QtCore/qtimer.h>
226 #include <QtCore/qvarlengtharray.h>
227 #include <QtCore/QMetaMethod>
228 #include <QtWidgets/qapplication.h>
229 #include <QtGui/qevent.h>
230 #include <QtWidgets/qgraphicslayout.h>
231 #include <QtWidgets/qgraphicsproxywidget.h>
232 #include <QtWidgets/qgraphicswidget.h>
233 #include <QtGui/qpaintengine.h>
234 #include <QtGui/qpainter.h>
235 #include <QtGui/qpainterpath.h>
236 #include <QtGui/qpixmapcache.h>
237 #include <QtGui/qpolygon.h>
238 #include <QtGui/qpointingdevice.h>
239 #include <QtWidgets/qstyleoption.h>
240 #if QT_CONFIG(tooltip)
241 #include <QtWidgets/qtooltip.h>
243 #include <QtGui/qtransform.h>
244 #include <QtGui/qinputmethod.h>
245 #include <private/qapplication_p.h>
246 #include <private/qevent_p.h>
247 #include <QtGui/private/qeventpoint_p.h>
248 #include <private/qobject_p.h>
249 #if QT_CONFIG(graphicseffect)
250 #include <private/qgraphicseffect_p.h>
252 #include <private/qgesturemanager_p.h>
253 #include <private/qpathclipper_p.h>
256 #ifndef GESTURE_DEBUG
257 # define DEBUG if (0) qDebug
259 # define DEBUG qDebug
287 dirtyGrowingItemsBoundingRect(
true),
289 calledEmitUpdated(
false),
290 processDirtyItemsEmitted(
false),
291 needSortTopLevelItems(
true),
292 holesInTopLevelSiblingIndex(
false),
293 topLevelSequentialOrdering(
true),
294 scenePosDescendantsUpdatePending(
false),
297 lastMouseGrabberItemHasImplicitMouseGrab(
false),
298 allItemsIgnoreHoverEvents(
true),
299 allItemsUseDefaultCursor(
true),
300 painterStateProtection(
true),
301 sortCacheEnabled(
false),
302 allItemsIgnoreTouchEvents(
true),
304 minimumRenderSize(0.0),
305 selectionChanging(0),
313 activationRefCount(0),
314 childExplicitActivation(0),
337 qApp->d_func()->scene_list.append(
q);
370 if (!
view->d_func()->connectedToScene) {
371 view->d_func()->connectedToScene =
true;
382 view->d_func()->processPendingUpdates();
385 view->d_func()->dispatchPendingUpdateRequests();
392 oldUpdatedRects <<
q->sceneRect();
397 std::back_inserter(oldUpdatedRects));
402 emit q->changed(oldUpdatedRects);
447 const QVariant booleanTrueVariant(
true);
452 for (
int i = 0;
i < oldUnpolishedCount; ++
i) {
503 if (wasPendingSceneUpdate)
507 view->d_func()->processPendingUpdates();
518 view->d_func()->dispatchPendingUpdateRequests();
529 p =
p->d_ptr->parent;
564 p =
p->d_ptr->parent;
619 widget->d_func()->fixFocusChainBeforeReparenting(
nullptr, oldScene,
nullptr);
627 if (parentItem->scene()) {
628 Q_ASSERT_X(parentItem->scene() ==
q,
"QGraphicsScene::removeItem",
629 "Parent item's scene is different from this item's scene");
682 if (unpolishedIndex != -1)
719 emit q->selectionChanged();
721 #ifndef QT_NO_GESTURES
748 qWarning(
"QGraphicsScene::setActivePanel: item %p must be part of this scene",
768 if (
fi ==
q->focusItem())
774 }
else if (
panel && !duringActivationEvent) {
776 const auto items =
q->items();
801 }
else if (
panel->isWidget()) {
808 fw = fw->d_func()->focusNext;
809 }
while (fw !=
panel);
811 }
else if (
q->isActive()) {
812 const auto items =
q->items();
836 bool emitFocusChanged)
853 if (emitFocusChanged)
893 if (emitFocusChanged)
942 widget->QGraphicsItem::d_ptr->setVisibleHelper(
false,
false);
957 qWarning(
"QGraphicsItem::grabMouse: already a mouse grabber");
963 qWarning(
"QGraphicsItem::grabMouse: already blocked by mouse grabber: %p",
997 qWarning(
"QGraphicsItem::ungrabMouse: not a mouse grabber");
1054 qWarning(
"QGraphicsItem::grabKeyboard: already a keyboard grabber");
1056 qWarning(
"QGraphicsItem::grabKeyboard: already blocked by keyboard grabber: %p",
1082 qWarning(
"QGraphicsItem::ungrabKeyboard: not a keyboard grabber");
1120 view->viewport()->setMouseTracking(
true);
1136 if (!
view->isTransformed())
1153 for (
int i = 0x1;
i <= 0x10;
i <<= 1) {
1154 if (
event->buttons() &
i) {
1187 }
while (
it !=
end);
1220 if (
it.value()->sceneEventFilter(
it.key(),
event))
1238 #if QT_CONFIG(gestures)
1241 if (gestureManager) {
1255 bool spont =
event->spontaneous();
1258 event->m_spont = spont;
1299 event.setWidget(hoverEvent->
widget());
1301 event.setPos(mapFromScene.
map(hoverEvent->
scenePos()));
1302 event.setScenePos(hoverEvent->
scenePos());
1303 event.setScreenPos(hoverEvent->
screenPos());
1307 event.setModifiers(hoverEvent->
modifiers());
1329 for (
int i = 0x1;
i <= 0x10;
i <<= 1) {
1335 mouseEvent->
setPos(itemPos);
1373 newActiveWindow = topItem ? topItem->
window() :
nullptr;
1376 if (newActiveWindow !=
q->activeWindow())
1377 q->setActiveWindow(newActiveWindow);
1380 bool setFocus =
false;
1404 bool sceneModality =
false;
1407 sceneModality =
true;
1495 dontClearSelection |= extendSelection;
1496 if (!dontClearSelection) {
1500 q->clearSelection();
1570 const auto items =
q->items();
1627 const auto items =
q->items();
1692 if (!QApplicationPrivate::is_app_closing)
1693 qApp->d_func()->scene_list.removeAll(
this);
1699 const auto views =
d->views;
1701 view->setScene(
nullptr);
1722 if (
d->hasSceneRect)
1723 return d->sceneRect;
1725 if (
d->dirtyGrowingItemsBoundingRect) {
1734 return d->growingItemsBoundingRect;
1739 if (
rect !=
d->sceneRect) {
1740 d->hasSceneRect = !
rect.isNull();
1741 d->sceneRect =
rect;
1792 if (targetRect.
isNull()) {
1794 targetRect = sourceRect;
1804 switch (aspectRatioMode) {
1806 xratio = yratio = qMin(xratio, yratio);
1809 xratio = yratio = qMax(xratio, yratio);
1819 const int numItems = itemList.
size();
1820 for (
int i = 0;
i < numItems; ++
i)
1821 itemArray[numItems -
i - 1] = itemList.
at(
i);
1831 .
scale(xratio, yratio)
1837 for (
int i = 0;
i < numItems; ++
i)
1838 itemArray[
i]->
d_ptr->initStyleOption(&styleOptionArray[
i], painterTransform, targetRect.
toRect());
1845 delete [] itemArray;
1846 delete [] styleOptionArray;
1870 return d->indexMethod;
1886 for (
int i = oldItems.
size() - 1;
i >= 0; --
i)
1887 d->index->addItem(oldItems.
at(
i));
1932 qWarning(
"QGraphicsScene::setBspTreeDepth: invalid depth %d ignored; must be >= 0",
depth);
1938 qWarning(
"QGraphicsScene::setBspTreeDepth: cannot apply if indexing method is not BSP");
1955 const auto items_ =
items();
1958 return boundingRect;
1970 return d->index->items(
order);
2107 qWarning(
"QGraphicsScene::collidingItems: cannot find collisions for null item");
2116 tmp << itemInVicinity;
2173 actuallySelectedSet <<
item;
2178 return d->selectedItems.values();
2191 return d->selectionArea;
2239 d->selectionArea =
path;
2244 ++
d->selectionChanging;
2258 switch (selectionOperation) {
2271 --
d->selectionChanging;
2273 if (!
d->selectionChanging &&
changed)
2287 ++
d->selectionChanging;
2294 d->selectedItems.clear();
2297 --
d->selectionChanging;
2299 if (!
d->selectionChanging &&
changed)
2318 while (!
d->topLevelItems.isEmpty())
2319 delete d->topLevelItems.first();
2321 d->lastItemCount = 0;
2322 d->allItemsIgnoreHoverEvents =
true;
2323 d->allItemsUseDefaultCursor =
true;
2324 d->allItemsIgnoreTouchEvents =
true;
2325 d->focusOnTouch =
true;
2356 int commonIndex = -1;
2361 commonIndex =
index;
2366 if (commonIndex == -1) {
2367 commonAncestor =
nullptr;
2371 commonAncestor = ancestors.
at(commonIndex);
2377 if (!commonAncestor)
2429 qWarning(
"QGraphicsScene::addItem: cannot add null item");
2433 qWarning(
"QGraphicsScene::addItem: item has already been added to this scene");
2438 oldScene->removeItem(
item);
2443 QVariant::fromValue<QGraphicsScene *>(
this)));
2444 QGraphicsScene *targetScene = qvariant_cast<QGraphicsScene *>(newSceneVariant);
2445 if (targetScene !=
this) {
2454 if (
d->unpolishedItems.isEmpty()) {
2458 d->unpolishedItems.append(
item);
2465 if (itemParent->d_ptr->scene !=
this)
2473 d->index->addItem(
item);
2477 d->registerTopLevelItem(
item);
2483 d->dirtyGrowingItemsBoundingRect =
true;
2486 ++
d->selectionChanging;
2487 int oldSelectedItemSize =
d->selectedItems.size();
2494 return item->acceptsHover
2498 if (
d->allItemsIgnoreHoverEvents && needsMouseTracking(
item->
d_ptr.
data())) {
2499 d->allItemsIgnoreHoverEvents =
false;
2500 d->enableMouseTrackingOnViews();
2502 #ifndef QT_NO_CURSOR
2504 d->allItemsUseDefaultCursor =
false;
2505 if (
d->allItemsIgnoreHoverEvents)
2506 d->enableMouseTrackingOnViews();
2512 d->allItemsIgnoreTouchEvents =
false;
2513 d->enableTouchEventsOnViews();
2516 #ifndef QT_NO_GESTURES
2519 d->grabGesture(
item,
it.key());
2524 d->selectedItems <<
item;
2528 d->enterModal(
item);
2534 if (!
d->tabFocusFirst) {
2541 myNewPrev->d_func()->focusNext =
widget;
2542 widget->d_func()->focusPrev->d_func()->focusNext =
d->tabFocusFirst;
2543 d->tabFocusFirst->d_func()->focusPrev =
widget->d_func()->focusPrev;
2544 widget->d_func()->focusPrev = myNewPrev;
2559 --
d->selectionChanging;
2560 if (!
d->selectionChanging &&
d->selectedItems.size() != oldSelectedItemSize)
2567 bool autoActivate =
true;
2571 if (
d->childExplicitActivation == 1)
2574 autoActivate =
false;
2575 d->childExplicitActivation = 0;
2577 d->childExplicitActivation = 0;
2582 if (!
d->lastActivePanel && !
d->activePanel &&
item->
isPanel()) {
2586 d->lastActivePanel =
item;
2591 d->registerScenePosItem(
item);
2598 d->updateInputMethodSensitivityInViews();
2850 qWarning(
"QGraphicsScene::removeItem: cannot remove 0-item");
2854 qWarning(
"QGraphicsScene::removeItem: item %p's scene (%p)"
2855 " is different from this scene (%p)",
2863 QVariant::fromValue<QGraphicsScene *>(0)));
2864 QGraphicsScene *targetScene = qvariant_cast<QGraphicsScene *>(newSceneVariant);
2865 if (targetScene !=
nullptr && targetScene !=
this) {
2870 d->removeItemHelper(
item);
2875 d->updateInputMethodSensitivityInViews();
2892 return isActive() ?
d->focusItem :
d->passiveFocusItem;
2917 d->setFocusItemHelper(
item, focusReason);
2965 d->hasFocus =
false;
2966 d->passiveFocusItem =
d->focusItem;
2997 return d->stickyFocus;
3025 return !
d->mouseGrabberItems.isEmpty() ?
d->mouseGrabberItems.last() : 0;
3047 return d->backgroundBrush;
3052 d->backgroundBrush =
brush;
3054 view->resetCachedContent();
3055 view->viewport()->update();
3083 return d->foregroundBrush;
3088 d->foregroundBrush =
brush;
3089 const auto views_ =
views();
3091 view->viewport()->update();
3111 if (
value.userType() == QMetaType::QRectF)
3113 else if (
value.userType() == QMetaType::QPointF)
3115 else if (
value.userType() == QMetaType::QRect)
3117 else if (
value.userType() == QMetaType::QPoint)
3131 if (
d->updateAll || (
rect.isEmpty() && !
rect.isNull()))
3136 bool directUpdates = !(
d->isSignalConnected(
d->changedSignalIndex)) && !
d->views.isEmpty();
3137 if (
rect.isNull()) {
3138 d->updateAll =
true;
3139 d->updatedRects.clear();
3140 if (directUpdates) {
3142 for (
auto view : qAsConst(
d->views))
3143 view->d_func()->fullUpdatePending =
true;
3146 if (directUpdates) {
3148 for (
auto view : qAsConst(
d->views)) {
3149 if (
view->isTransformed())
3150 view->d_func()->updateRectF(
view->viewportTransform().mapRect(
rect));
3155 d->updatedRects.insert(
rect);
3159 if (!
d->calledEmitUpdated) {
3160 d->calledEmitUpdated =
true;
3197 const auto views_ =
views();
3238 for (
int i = 0;
i < 2; ++
i) {
3239 const auto items_ =
items();
3270 switch (
event->type()) {
3288 d->cachedItemsUnderMouse.clear();
3293 switch (
event->type()) {
3310 if (!
d->focusItem) {
3336 if (
event->isAccepted())
3345 d->lastSceneMousePos = mouseEvent->
scenePos();
3372 d->lastSceneMousePos = hoverEvent->
scenePos();
3373 d->dispatchHoverEvent(hoverEvent);
3378 "QGraphicsScene must not receive QEvent::Leave, use GraphicsSceneLeave");
3383 d->leaveScene(leaveEvent->widget());
3393 if (!
d->activationRefCount++) {
3394 if (
d->lastActivePanel) {
3396 d->setActivePanelHelper(
d->lastActivePanel,
true);
3397 }
else if (
d->tabFocusFirst &&
d->tabFocusFirst->isPanel()) {
3400 d->setActivePanelHelper(
d->tabFocusFirst,
true);
3404 const auto items_ =
items();
3413 if (!--
d->activationRefCount) {
3414 if (
d->activePanel) {
3418 d->setActivePanelHelper(
nullptr,
true);
3419 d->lastActivePanel = lastActivePanel;
3423 const auto items_ =
items();
3442 d->resolvePalette();
3464 #ifndef QT_NO_GESTURES
3484 if (watched !=
qApp)
3487 switch (
event->type()) {
3547 d->dragDropItem =
nullptr;
3566 if (!
d->mouseGrabberItems.isEmpty()) {
3568 d->clearMouseGrabber();
3569 d->mouseGrabberButtonDownPos.clear();
3570 d->mouseGrabberButtonDownScenePos.clear();
3571 d->mouseGrabberButtonDownScreenPos.clear();
3574 bool eventDelivered =
false;
3578 const auto items =
d->itemsAtPosition(
event->screenPos(),
3585 if (
item !=
d->dragDropItem) {
3589 d->cloneDragDropEvent(&dragEnter,
event);
3591 d->sendDragDropEvent(
item, &dragEnter);
3593 event->setDropAction(dragEnter.
dropAction());
3594 if (!
event->isAccepted()) {
3599 d->lastDropAction =
event->dropAction();
3601 if (
d->dragDropItem) {
3607 d->cloneDragDropEvent(&dragLeave,
event);
3608 d->sendDragDropEvent(
d->dragDropItem, &dragLeave);
3612 d->dragDropItem =
item;
3616 event->setDropAction(
d->lastDropAction);
3619 if (
event->isAccepted())
3620 d->lastDropAction =
event->dropAction();
3621 eventDelivered =
true;
3625 if (!eventDelivered) {
3626 if (
d->dragDropItem) {
3629 d->cloneDragDropEvent(&dragLeave,
event);
3630 d->sendDragDropEvent(
d->dragDropItem, &dragLeave);
3631 d->dragDropItem =
nullptr;
3648 if (
d->dragDropItem) {
3650 d->sendDragDropEvent(
d->dragDropItem,
event);
3651 d->dragDropItem =
nullptr;
3666 if (
d->dragDropItem) {
3668 d->sendDragDropEvent(
d->dragDropItem,
event);
3669 d->dragDropItem =
nullptr;
3687 switch (focusEvent->
reason()) {
3697 if (
d->passiveFocusItem) {
3717 d->hasFocus =
false;
3718 d->passiveFocusItem =
d->focusItem;
3722 if (!
d->popupWidgets.isEmpty())
3723 d->removePopup(
d->popupWidgets.constFirst());
3743 #if !QT_CONFIG(tooltip)
3752 for (
auto item : itemsAtPos) {
3753 if (
item->d_func()->isProxyWidget()) {
3759 if (!
item->toolTip().isEmpty()) {
3768 if (toolTipItem && !toolTipItem->toolTip().isEmpty()) {
3769 text = toolTipItem->toolTip();
3820 commonAncestorItem = commonAncestorItem->
parentItem();
3821 if (commonAncestorItem && commonAncestorItem->
panel() !=
item->
panel()) {
3824 commonAncestorItem =
nullptr;
3874 #if QT_CONFIG(tooltip)
3909 QGraphicsItem *
item = !
d->keyboardGrabberItems.isEmpty() ?
d->keyboardGrabberItems.constLast() : 0;
3919 if (
p->isBlockedByModalPanel())
3921 if (!
d->sendEvent(
p, keyEvent))
3923 }
while (!keyEvent->
isAccepted() && !
p->isPanel() && (
p =
p->parentItem()));
3941 QGraphicsItem *
item = !
d->keyboardGrabberItems.isEmpty() ?
d->keyboardGrabberItems.constLast() : 0;
3951 if (
p->isBlockedByModalPanel())
3953 if (!
d->sendEvent(
p, keyEvent))
3955 }
while (!keyEvent->
isAccepted() && !
p->isPanel() && (
p =
p->parentItem()));
3983 if (
d->mouseGrabberItems.isEmpty()) {
3986 _q_hoverFromMouseEvent(&hover, mouseEvent);
3987 d->dispatchHoverEvent(&hover);
3990 d->mousePressEventHandler(mouseEvent);
4008 if (
d->mouseGrabberItems.isEmpty()) {
4012 _q_hoverFromMouseEvent(&hover, mouseEvent);
4013 mouseEvent->
setAccepted(
d->dispatchHoverEvent(&hover));
4018 d->sendMouseEvent(mouseEvent);
4038 if (
d->mouseGrabberItems.isEmpty()) {
4044 d->sendMouseEvent(mouseEvent);
4049 if (!
d->mouseGrabberItems.isEmpty()) {
4050 d->lastMouseGrabberItem =
d->mouseGrabberItems.constLast();
4051 if (
d->lastMouseGrabberItemHasImplicitMouseGrab)
4052 d->mouseGrabberItems.constLast()->ungrabMouse();
4054 d->lastMouseGrabberItem =
nullptr;
4059 _q_hoverFromMouseEvent(&hoverEvent, mouseEvent);
4060 d->dispatchHoverEvent(&hoverEvent);
4086 d->mousePressEventHandler(mouseEvent);
4113 while (
iter >
d->popupWidgets.constBegin() && !wheelCandidates.
isEmpty()) {
4115 if (wheelCandidates.
first() == *
iter || (*iter)->isAncestorOf(wheelCandidates.
first()))
4117 d->removePopup(*
iter);
4120 bool hasSetFocus =
false;
4156 d->sendEvent(
d->focusItem,
event);
4160 d->sendEvent(
d->lastFocusItem,
event);
4181 if (
d->painterStateProtection)
4185 if (
d->painterStateProtection)
4208 if (
d->painterStateProtection)
4212 if (
d->painterStateProtection)
4219 bool useWindowOpacity,
bool painterStateProtection)
4227 const qreal windowOpacity = (
proxy &&
proxy->widget() && useWindowOpacity)
4228 ?
proxy->widget()->windowOpacity() : 1.0;
4234 if (windowOpacity < 1.0)
4243 if (painterStateProtection)
4246 if (painterStateProtection)
4257 if (windowOpacity < 1.0)
4262 const QTransform &itemToPixmap, QPainter::RenderHints renderHints,
4277 pixmapPainter.
begin(&subPix);
4279 if (!pixmapExposed.
isEmpty()) {
4291 _q_paintItem(
item, &pixmapPainter,
option,
nullptr,
false, painterStateProtection);
4292 pixmapPainter.
end();
4300 pixmapPainter.
end();
4317 if (m11 == 0.0f && m22 == 0.0f) {
4318 if (m12 == 1.0f && m21 == -1.0f)
4320 else if (m12 == -1.0f && m21 == 1.0f)
4322 else if (m12 == -1.0f && m21 == -1.0f)
4324 else if (m12 == 1.0f && m21 == 1.0f)
4338 bool painterStateProtection)
4351 qreal newPainterOpacity = oldPainterOpacity;
4354 const qreal windowOpacity =
proxy->widget()->windowOpacity();
4355 if (windowOpacity < 1.0)
4356 newPainterOpacity *= windowOpacity;
4361 QRectF adjustedBrect(brect);
4362 _q_adjustRect(&adjustedBrect);
4373 pixmapKey = itemCache->
key;
4386 if (fixedCacheSize) {
4389 pixmapSize = br.
size();
4392 pixmapSize *= devicePixelRatio;
4396 QSize adjustSize(adjust*2, adjust*2);
4397 br.
adjust(-adjust / devicePixelRatio, -adjust / devicePixelRatio, adjust / devicePixelRatio, adjust / devicePixelRatio);
4398 if (
pix.
isNull() || (!fixedCacheSize && (pixmapSize + adjustSize) !=
pix.
size())) {
4419 if (fixedCacheSize) {
4421 (pixmapSize.
height() / devicePixelRatio) / brect.
height());
4432 for (
const auto &
rect : qAsConst(itemCache->
exposed)) {
4433 exposedRect |=
rect;
4434 pixmapExposed += itemToPixmap.
mapRect(
rect).toAlignedRect();
4437 exposedRect = brect;
4457 if (newPainterOpacity != oldPainterOpacity) {
4480 QSize maximumCacheSize =
4482 if (!maximumCacheSize.
isEmpty()
4493 bool pixModified =
false;
4495 bool invertable =
true;
4500 bool allowPartialCacheExposure =
false;
4503 if (!simpleTransform) {
4509 }
else if (!viewRect.
isNull()) {
4521 if (allowPartialCacheExposure) {
4528 QPoint newCacheIndent(dx, dy);
4550 newPixPainter.
end();
4555 exposed -=
QRect(-diff,
pix.
size() / devicePixelRatio);
4556 scrollExposure = exposed;
4590 QRegion pixmapExposed = scrollExposure;
4592 for (
const auto &
rect : qAsConst(itemCache->
exposed))
4601 for (
const auto &
rect : qAsConst(itemCache->
exposed))
4604 for (
const QRect &
r : qAsConst(scrollExposure))
4630 if (newPainterOpacity != oldPainterOpacity) {
4654 exposedSceneRect = viewTransform->
inverted().
mapRect(exposedSceneRect);
4657 for (
const auto subTree : tli)
4673 if (!itemHasContents && !itemHasChildren)
4683 bool translateOnlyTransform =
false;
4684 #define ENSURE_TRANSFORM_PTR \
4685 if (!transformPtr) { \
4686 Q_ASSERT(!itemIsUntransformable); \
4687 if (viewTransform) { \
4688 transform = item->d_ptr->sceneTransform; \
4689 transform *= *viewTransform; \
4690 transformPtr = &transform; \
4692 transformPtr = &item->d_ptr->sceneTransform; \
4693 translateOnlyTransform = item->d_ptr->sceneTransformTranslateOnly; \
4699 bool wasDirtyParentSceneTransform =
false;
4701 if (itemIsUntransformable) {
4707 wasDirtyParentSceneTransform =
true;
4712 bool drawItem = itemHasContents && !itemIsFullyTransparent;
4714 const QRectF brect = adjustedItemEffectiveBoundingRect(
item);
4716 QRectF preciseViewBoundingRect = translateOnlyTransform ? brect.
translated(transformPtr->
dx(), transformPtr->
dy())
4717 : transformPtr->
mapRect(brect);
4719 bool itemIsTooSmallToRender =
false;
4723 itemIsTooSmallToRender =
true;
4727 bool itemIsOutsideVisibleRect =
false;
4729 QRect viewBoundingRect = preciseViewBoundingRect.toAlignedRect();
4733 drawItem = exposedRegion ? exposedRegion->
intersects(viewBoundingRect)
4735 itemIsOutsideVisibleRect = !drawItem;
4738 if (itemIsTooSmallToRender || itemIsOutsideVisibleRect) {
4744 if (!itemHasChildren)
4746 if (itemClipsChildrenToShape) {
4747 if (wasDirtyParentSceneTransform)
4754 if (itemHasChildren && itemClipsChildrenToShape)
4757 #if QT_CONFIG(graphicseffect)
4761 painter, opacity, wasDirtyParentSceneTransform, itemHasContents && !itemIsFullyTransparent);
4763 QGraphicsItemEffectSourcePrivate *sourced =
static_cast<QGraphicsItemEffectSourcePrivate *
>
4765 sourced->info = &
info;
4767 if (effectTransform)
4780 QRect effectRect = sourced->paddedEffectRect(
Qt::DeviceCoordinates, sourced->currentCachedMode(), sourceRect).toAlignedRect();
4782 sourced->setCachedOffset(effectRect.
topLeft());
4792 sourced->info =
nullptr;
4797 effectTransform, wasDirtyParentSceneTransform, drawItem);
4816 if (effectTransform)
4825 bool wasDirtyParentSceneTransform,
bool drawItem)
4832 bool setChildClip = itemClipsChildrenToShape;
4833 bool itemHasChildrenStackedBehind =
false;
4836 if (itemHasChildren) {
4837 if (itemClipsChildrenToShape)
4838 setWorldTransform(
painter, transformPtr, effectTransform);
4846 if (itemHasChildrenStackedBehind) {
4847 if (itemClipsChildrenToShape) {
4849 setChildClip =
false;
4855 if (wasDirtyParentSceneTransform)
4856 child->d_ptr->dirtySceneTransform = 1;
4872 ? *exposedRegion :
QRegion(), exposedRegion ==
nullptr);
4875 bool restorePainterClip =
false;
4877 if (!itemHasChildren || !itemClipsChildrenToShape) {
4879 setWorldTransform(
painter, transformPtr, effectTransform);
4880 if ((restorePainterClip = itemClipsToShape))
4882 }
else if (itemHasChildrenStackedBehind){
4885 if (itemClipsToShape) {
4887 setWorldTransform(
painter, transformPtr, effectTransform);
4891 setChildClip =
true;
4893 }
else if (itemClipsToShape) {
4898 setChildClip =
false;
4913 static int drawRect = qEnvironmentVariableIntValue(
"QT_DRAW_SCENE_ITEM_RECTS");
4928 if (itemHasChildren) {
4934 if (wasDirtyParentSceneTransform)
4935 child->d_ptr->dirtySceneTransform = 1;
4942 if (itemClipsChildrenToShape)
4948 bool force,
bool ignoreOpacity,
bool removingItemFromScene,
4949 bool updateBoundingRect)
4965 if (
p->d_ptr->ignoreOpacity) {
4969 p =
p->d_ptr->parent;
4974 removingItemFromScene || invalidateChildren,
4989 const bool fullItemUpdate =
rect.isNull();
4990 if (!fullItemUpdate &&
rect.isEmpty())
5000 if (removingItemFromScene) {
5021 if (!hasNoContents) {
5028 invalidateChildren =
true;
5031 if (invalidateChildren) {
5041 if (!updateBoundingRect)
5046 const QRectF &
rect,
bool itemIsUntransformable)
5054 if (itemIsUntransformable) {
5056 if (!
item->hasBoundingRegionGranularity)
5061 if (
item->sceneTransformTranslateOnly &&
view->identityMatrix) {
5065 r.translate(dx -
view->horizontalScroll(), dy -
view->verticalScroll());
5066 return view->updateRectF(
r);
5070 if (!
item->hasBoundingRegionGranularity)
5077 if (!
item->hasBoundingRegionGranularity)
5083 qreal parentOpacity)
5102 if (!itemHasContents) {
5103 if (!itemHasChildren) {
5108 itemHasContents =
true;
5121 if (wasDirtyParentSceneTransform && !itemIsUntransformable) {
5127 if (itemIsFullyTransparent || !itemHasContents || dirtyAncestorContainsChildren) {
5132 if (itemIsFullyTransparent || !itemHasContents)
5149 const QRectF itemBoundingRect = adjustedItemEffectiveBoundingRect(
item);
5160 if (!
rect.isEmpty())
5165 bool uninitializedDirtyRect =
true;
5175 paintedViewBoundingRect =
QRect(-1, -1, -1, -1);
5181 if (!viewPrivate->
updateRect(paintedViewBoundingRect))
5182 paintedViewBoundingRect =
QRect(-1, -1, -1, -1);
5189 && paintedViewBoundingRect.
x() == -1 && paintedViewBoundingRect.
y() == -1
5190 && paintedViewBoundingRect.
width() == -1 && paintedViewBoundingRect.
height() == -1) {
5194 if (uninitializedDirtyRect) {
5195 dirtyRect = itemBoundingRect;
5200 uninitializedDirtyRect =
false;
5206 if (!updateHelper(viewPrivate,
item->
d_ptr.
data(), dirtyRect, itemIsUntransformable)
5208 paintedViewBoundingRect =
QRect(-1, -1, -1, -1);
5222 const bool bypassUpdateClip = !itemHasContents && wasDirtyParentViewBoundingRects;
5223 if (itemClipsChildrenToShape && !bypassUpdateClip) {
5226 view->d_func()->setUpdateClip(
item);
5228 if (!dirtyAncestorContainsChildren) {
5230 && itemClipsChildrenToShape;
5236 if (wasDirtyParentSceneTransform)
5237 child->d_ptr->dirtySceneTransform = 1;
5238 if (wasDirtyParentViewBoundingRects)
5239 child->d_ptr->paintedViewBoundingRectsNeedRepaint = 1;
5240 if (parentIgnoresVisible)
5241 child->d_ptr->ignoreVisible = 1;
5242 if (parentIgnoresOpacity)
5243 child->d_ptr->ignoreOpacity = 1;
5244 if (allChildrenDirty) {
5245 child->d_ptr->dirty = 1;
5246 child->d_ptr->fullUpdatePending = 1;
5247 child->d_ptr->dirtyChildren = 1;
5248 child->d_ptr->allChildrenDirty = 1;
5253 if (itemClipsChildrenToShape) {
5256 view->d_func()->setUpdateClip(
nullptr);
5258 }
else if (wasDirtyParentSceneTransform) {
5303 if (!
d->unpolishedItems.isEmpty())
5304 d->_q_polishItems();
5313 const quint32 oldRectAdjust =
d->rectAdjust;
5315 d->updateAll =
false;
5316 expose = &
view->d_func()->exposedRegion;
5325 for (
int i = 0;
i < numItems; ++
i) {
5328 topLevelItems <<
item;
5334 d->rectAdjust = oldRectAdjust;
5336 for (
auto topLevelItem : qAsConst(topLevelItems))
5337 topLevelItem->d_ptr->itemDiscovered = 0;
5366 if (
d->lastFocusItem && !
d->lastFocusItem->isWidget()) {
5372 if (
d->activePanel) {
5377 if (
d->activePanel->isWidget()) {
5385 fw =
next ? fw->d_func()->focusNext : fw->d_func()->focusPrev;
5386 }
while (fw !=
d->activePanel);
5390 if (!
item && !
d->tabFocusFirst) {
5398 widget =
next ?
d->tabFocusFirst :
d->tabFocusFirst->d_func()->focusPrev;
5401 widget =
next ? test->d_func()->focusNext : test->d_func()->focusPrev;
5422 }
while (
widget != widgetThatHadFocus);
5529 d->style->setParent(
this);
5536 const auto items_ =
items();
5580 d->setFont_helper(resolvedFont);
5617 d->setPalette_helper(resolvedPalette);
5631 return d->activationRefCount > 0;
5644 return d->activePanel;
5661 d->setActivePanelHelper(
item,
false);
5675 if (
d->activePanel &&
d->activePanel->isWindow())
5691 qWarning(
"QGraphicsScene::setActiveWindow: widget %p must be part of this scene",
5710 z = qMax(
z, sibling->zValue());
5715 panel->setZValue(
z + litt);
5735 qWarning(
"QGraphicsScene::sendEvent: cannot send event to a null item");
5739 qWarning(
"QGraphicsScene::sendEvent: item %p's scene (%p)"
5740 " is different from this scene (%p)",
5781 return d->minimumRenderSize;
5786 d->minimumRenderSize = minSize;
5816 return d->focusOnTouch;
5828 #ifndef QT_NO_GESTURES
5831 view->viewport()->grabGesture(
it.key());
5847 QMutableEventPoint::setPosition(pt, mapFromScene.
map(pt.scenePosition()));
5853 int closestTouchPointId = -1;
5857 if (closestTouchPointId == -1||
distance < closestDistance) {
5858 closestTouchPointId = touchPoint.id();
5862 return closestTouchPointId;
5870 const auto &touchPoints = sceneTouchEvent->
points();
5871 for (
const auto &touchPoint : touchPoints) {
5874 if (touchPoint.state() == QEventPoint::State::Pressed) {
5885 touchPoint.scenePosition(),
5902 }
else if (touchPoint.state() == QEventPoint::State::Released) {
5916 StatesAndTouchPoints &statesAndTouchPoints = itemsNeedingEvents[
item];
5917 statesAndTouchPoints.first =
QEventPoint::States(statesAndTouchPoints.first | touchPoint.state());
5918 statesAndTouchPoints.second.append(touchPoint);
5921 if (itemsNeedingEvents.
isEmpty()) {
5922 sceneTouchEvent->
ignore();
5926 bool ignoreSceneTouchEvent =
true;
5936 switch (
it.value().first) {
5937 case QEventPoint::State::Pressed:
5941 case QEventPoint::State::Released:
5945 case QEventPoint::State::Stationary:
5969 for (
const auto &touchPoint : unhandledTouchPoints) {
5973 ignoreSceneTouchEvent =
false;
5981 ignoreSceneTouchEvent =
false;
5987 sceneTouchEvent->QInputEvent::setAccepted(ignoreSceneTouchEvent);
5998 firstTouchPoint.scenePosition(),
6003 bool setFocus =
false;
6031 bool eventAccepted =
touchEvent->isAccepted();
6046 if (
res && eventAccepted) {
6049 for (
const auto &touchPoint : touchPoints)
6058 touchEvent->QInputEvent::setAccepted(eventAccepted);
6071 view->d_func()->updateInputMethodSensitivity();
6083 panel->
d_ptr->panelModality = previousModality;
6088 const auto items_ =
q->items();
6089 for (
const auto &
item : items_) {
6120 const auto items_ =
q->items();
6121 for (
const auto &
item : items_) {
6142 const auto items_ =
q->items();
6143 for (
const auto &
item : items_) {
6153 const auto items_ =
q->items();
6154 for (
const auto &
item : items_) {
6166 #ifndef QT_NO_GESTURES
6175 for (
QGesture *gesture : gestures) {
6176 if (!gesture->hasHotSpot())
6190 d->gestureContext.constFind(gestureType);
6191 if (
it !=
d->gestureContext.constEnd() && (!flag || (
it.value() & flag))) {
6192 if (normalGestures.
contains(gesture)) {
6193 normalGestures.
remove(gesture);
6195 conflicts->
insert(gesture);
6197 normalGestures.
insert(gesture);
6200 (*targets)[itemobj].insert(gesture);
6202 (*itemsSet).insert(itemobj);
6211 *normal = normalGestures;
6224 DEBUG() <<
"QGraphicsScenePrivate::gestureEventHandler:"
6225 <<
"Gestures:" << allGestures;
6231 for (
QGesture *gesture : allGestures) {
6233 if (gesture->hasHotSpot()) {
6234 gesture->d_func()->sceneHotSpot = toScene.
map(gesture->hotSpot());
6236 gesture->d_func()->sceneHotSpot =
QPointF();
6244 startedGestures.
insert(gesture);
6248 if (!startedGestures.
isEmpty()) {
6252 &normalGestures, &conflictedGestures);
6255 DEBUG() <<
"QGraphicsScenePrivate::gestureEventHandler:"
6256 <<
"Normal gestures:" << normalGestures
6257 <<
"Conflicting gestures:" << conflictedGestures;
6261 if (!conflictedGestures.
isEmpty()) {
6270 DEBUG() <<
"QGraphicsScenePrivate::gestureEventHandler:"
6271 <<
"delivering override to"
6292 for(;
it !=
e; ++
it)
6293 it.value().remove(
g);
6296 DEBUG() <<
"QGraphicsScenePrivate::gestureEventHandler:"
6297 <<
"override was accepted:"
6307 if (conflictedGestures.
isEmpty())
6313 if (!normalGestures.
isEmpty()) {
6333 for (
QGesture *gesture : allGestures) {
6337 undeliveredGestures.
insert(gesture);
6339 const Qt::GestureFlags
flags =
d->gestureContext.value(gesture->gestureType());
6341 parentPropagatedGestures.
insert(gesture);
6343 DEBUG() <<
"QGraphicsScenePrivate::gestureEventHandler:"
6344 <<
"no target for" << gesture <<
"at"
6345 << gesture->hotSpot() << gesture->d_func()->sceneHotSpot;
6359 const bool isPanel = receiver.
data()->isPanel();
6361 DEBUG() <<
"QGraphicsScenePrivate::gestureEventHandler:"
6363 << receiver.
data() << gestures;
6383 undeliveredGestures.
remove(
g);
6386 if (undeliveredGestures.
isEmpty())
6391 if (!ignoredGestures.
isEmpty() && !isPanel) {
6400 it != ignoredGestures.
end();) {
6401 if (parentPropagatedGestures.
contains(*
it)) {
6407 if (
item->d_func()->gestureContext.
contains(gestureType)) {
6429 DEBUG() <<
"QGraphicsScenePrivate::gestureEventHandler:"
6436 for (
QGesture *
g : qAsConst(startedGestures)) {
6438 DEBUG() <<
"lets try to cancel some";
6446 switch (
g->state()) {
6465 if (originalItem ==
nullptr)
6477 DEBUG() <<
" found a gesture to cancel" <<
iter.key();
6479 canceledGestures <<
iter.key();
6487 while (!almostCanceledGestures.
isEmpty()) {
6490 setIter = almostCanceledGestures.
begin();
6492 while (setIter != almostCanceledGestures.
end()) {
6497 gestures << *setIter;
6498 setIter = almostCanceledGestures.
erase(setIter);
6515 if (!
g->hasHotSpot())
6524 if (
d->gestureContext.contains(
g->gestureType())) {
6539 for (setIter = canceledGestures.
begin(); setIter != canceledGestures.
end(); ++setIter) {
6540 gestureManager->
recycle(*setIter);
6550 view->viewport()->grabGesture(gesture);
6562 view->viewport()->ungrabGesture(gesture);
6569 #include "moc_qgraphicsscene.cpp"
small capitals from c petite p scientific i
[1]
bool qt_sendSpontaneousEvent(QObject *receiver, QEvent *event)
QGestureManager * gestureManager
static QApplicationPrivate * instance()
The QBrush class defines the fill pattern of shapes drawn by QPainter.
The QColor class provides colors based on RGB, HSV or CMYK values.
static QColor fromHsv(int h, int s, int v, int a=255)
static bool sendEvent(QObject *receiver, QEvent *event)
static void postEvent(QObject *receiver, QEvent *event, int priority=Qt::NormalEventPriority)
The QEvent class is the base class of all event classes. Event objects contain event parameters.
virtual void setAccepted(bool accepted)
@ ApplicationPaletteChange
@ GraphicsSceneContextMenu
@ GraphicsSceneMouseRelease
@ GraphicsSceneMousePress
@ GraphicsSceneHoverLeave
@ GraphicsSceneMouseDoubleClick
@ GraphicsSceneHoverEnter
The QEventPoint class provides information about a point in a QPointerEvent.
The QFocusEvent class contains event parameters for widget focus events. \inmodule QtGui.
Qt::FocusReason reason() const
The QFont class specifies a query for a font used for drawing text.
QFont resolve(const QFont &) const
void setResolveMask(uint mask)
The QGestureEvent class provides the description of triggered gestures.
void setWidget(QWidget *widget)
bool isAccepted(QGesture *) const
void setAccepted(QGesture *, bool)
The QGesture class represents a gesture, containing properties that describe the corresponding user i...
Qt::GestureType gestureType
the type of the gesture
void recycle(QGesture *gesture)
bool filterEvent(QWidget *receiver, QEvent *event)
static QGestureManager * instance(InstanceCreation ic=ForceCreation)
void cleanupCachedGestures(QObject *target, Qt::GestureType type)
QGraphicsEffectSource * source() const
virtual void draw(QPainter *painter)=0
The QGraphicsEllipseItem class provides an ellipse item that you can add to a QGraphicsScene.
QHash< QPaintDevice *, DeviceData > deviceData
The QGraphicsItemGroup class provides a container that treats a group of items as a single item.
The QGraphicsItem class is the base class for all graphical items in a QGraphicsScene.
virtual bool contains(const QPointF &point) const
QTransform deviceTransform(const QTransform &viewportTransform) const
void setSelected(bool selected)
QScopedPointer< QGraphicsItemPrivate > d_ptr
virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value)
qreal boundingRegionGranularity() const
virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget=nullptr)=0
QGraphicsScene * scene() const
virtual bool collidesWithItem(const QGraphicsItem *other, Qt::ItemSelectionMode mode=Qt::IntersectsItemShape) const
virtual QPainterPath shape() const
@ ItemClipsChildrenToShape
@ ItemContainsChildrenInShape
@ ItemSendsScenePositionChanges
@ ItemIgnoresParentOpacity
@ ItemStopsClickFocusPropagation
QGraphicsWidget * window() const
QRectF sceneBoundingRect() const
virtual QRectF boundingRect() const =0
bool isBlockedByModalPanel(QGraphicsItem **blockingPanel=nullptr) const
QGraphicsObject * toGraphicsObject()
virtual void advance(int phase)
void setParentItem(QGraphicsItem *parent)
Qt::MouseButtons acceptedMouseButtons() const
QVariant data(int key) const
QGraphicsItem * panel() const
QGraphicsItem * parentItem() const
QTransform sceneTransform() const
QGraphicsItem * commonAncestorItem(const QGraphicsItem *other) const
QGraphicsItem * focusItem() const
PanelModality panelModality() const
void setFocus(Qt::FocusReason focusReason=Qt::OtherFocusReason)
GraphicsItemFlags flags() const
virtual bool sceneEvent(QEvent *event)
bool acceptTouchEvents() const
bool isAncestorOf(const QGraphicsItem *child) const
bool isOpacityNull() const
void invalidateChildrenSceneTransform()
QVariant extra(Extra type) const
quint32 dirtySceneTransform
static bool insertionOrder(QGraphicsItem *a, QGraphicsItem *b)
quint32 isDeclarativeItem
void initStyleOption(QStyleOptionGraphicsItem *option, const QTransform &worldTransform, const QRegion &exposedRegion, bool allItems=false) const
QGraphicsEffect * graphicsEffect
@ ExtraMaxDeviceCoordCacheSize
void markParentDirty(bool updateBoundingRect=false)
QMap< Qt::GestureType, Qt::GestureFlags > gestureContext
bool itemIsUntransformable() const
bool discardUpdateRequest(bool ignoreVisibleBit=false, bool ignoreDirtyBit=false, bool ignoreOpacity=false) const
bool childrenCombineOpacity() const
void clearSubFocus(QGraphicsItem *rootItem=nullptr, QGraphicsItem *stopItem=nullptr)
QList< QGraphicsItem * > children
@ AncestorFiltersChildEvents
quint32 acceptedTouchBeginEvent
quint32 sceneTransformTranslateOnly
quint32 scenePosDescendants
quint32 acceptTouchEvents
QPointF genericMapFromScene(const QPointF &pos, const QWidget *viewport) const
virtual void updateSceneTransformFromParent()
QTransform genericMapFromSceneTransform(const QWidget *viewport=nullptr) const
quint32 paintedViewBoundingRectsNeedRepaint
virtual void resolvePalette(uint inheritedMask)
QTransform sceneTransform
QHash< QWidget *, QRect > paintedViewBoundingRects
QGraphicsItemCache * extraItemCache() const
virtual void resolveFont(uint inheritedMask)
qreal combineOpacityFromParent(qreal parentOpacity) const
void ensureSortedChildren()
quint32 fullUpdatePending
The QGraphicsLineItem class provides a line item that you can add to a QGraphicsScene.
The QGraphicsObject class provides a base class for all graphics items that require signals,...
The QGraphicsPixmapItem class provides a pixmap item that you can add to a QGraphicsScene.
The QGraphicsPolygonItem class provides a polygon item that you can add to a QGraphicsScene.
The QGraphicsRectItem class provides a rectangle item that you can add to a QGraphicsScene.
The QGraphicsSceneBspTreeIndex class provides an implementation of a BSP indexing algorithm for disco...
void setBspTreeDepth(int depth)
int bspTreeDepth
the depth of the BSP index tree
The QGraphicsSceneDragDropEvent class provides events for drag and drop in the graphics view framewor...
void setButtons(Qt::MouseButtons buttons)
void setMimeData(const QMimeData *data)
void setPossibleActions(Qt::DropActions actions)
void setProposedAction(Qt::DropAction action)
void setModifiers(Qt::KeyboardModifiers modifiers)
Qt::DropAction dropAction() const
void setDropAction(Qt::DropAction action)
void setSource(QWidget *source)
void setScreenPos(const QPoint &pos)
void setPos(const QPointF &pos)
void setScenePos(const QPointF &pos)
The QGraphicsSceneEvent class provides a base class for all graphics view related events.
void setWidget(QWidget *widget)
The QGraphicsSceneHelpEvent class provides events when a tooltip is requested.
The QGraphicsSceneHoverEvent class provides hover events in the graphics view framework.
void setScreenPos(const QPoint &pos)
void setPos(const QPointF &pos)
QPoint lastScreenPos() const
void setLastPos(const QPointF &pos)
void setScenePos(const QPointF &pos)
void setModifiers(Qt::KeyboardModifiers modifiers)
QPointF lastScenePos() const
void setLastScenePos(const QPointF &pos)
void setLastScreenPos(const QPoint &pos)
Qt::KeyboardModifiers modifiers() const
The QGraphicsScene class provides a surface for managing a large number of 2D graphical items.
qreal minimumRenderSize
the minimal view-transformed size an item must have to be drawn
QList< QGraphicsItem * > items(Qt::SortOrder order=Qt::DescendingOrder) const
void removeItem(QGraphicsItem *item)
void setFont(const QFont &font)
void addItem(QGraphicsItem *item)
virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event)
void changed(const QList< QRectF > ®ion)
virtual void mousePressEvent(QGraphicsSceneMouseEvent *event)
QGraphicsProxyWidget * addWidget(QWidget *widget, Qt::WindowFlags wFlags=Qt::WindowFlags())
void destroyItemGroup(QGraphicsItemGroup *group)
virtual void helpEvent(QGraphicsSceneHelpEvent *event)
void setFocusItem(QGraphicsItem *item, Qt::FocusReason focusReason=Qt::OtherFocusReason)
bool stickyFocus
whether clicking into the scene background will clear focus
virtual void dropEvent(QGraphicsSceneDragDropEvent *event)
bool sendEvent(QGraphicsItem *item, QEvent *event)
virtual void drawItems(QPainter *painter, int numItems, QGraphicsItem *items[], const QStyleOptionGraphicsItem options[], QWidget *widget=nullptr)
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event)
void setFocusOnTouch(bool enabled)
QGraphicsPathItem * addPath(const QPainterPath &path, const QPen &pen=QPen(), const QBrush &brush=QBrush())
virtual void wheelEvent(QGraphicsSceneWheelEvent *event)
void setBspTreeDepth(int depth)
QGraphicsEllipseItem * addEllipse(const QRectF &rect, const QPen &pen=QPen(), const QBrush &brush=QBrush())
void setStickyFocus(bool enabled)
virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event)
void setActivePanel(QGraphicsItem *item)
virtual void focusInEvent(QFocusEvent *event)
QList< QGraphicsItem * > selectedItems() const
QGraphicsScene(QObject *parent=nullptr)
bool eventFilter(QObject *watched, QEvent *event) override
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
QRectF sceneRect
the scene rectangle; the bounding rectangle of the scene
virtual void drawBackground(QPainter *painter, const QRectF &rect)
void setForegroundBrush(const QBrush &brush)
void setStyle(QStyle *style)
QGraphicsItem * activePanel() const
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event)
QBrush foregroundBrush
the foreground brush of the scene.
int bspTreeDepth
the depth of QGraphicsScene's BSP index tree
void invalidate(qreal x, qreal y, qreal w, qreal h, SceneLayers layers=AllLayers)
void setPalette(const QPalette &palette)
virtual ~QGraphicsScene()
QList< QGraphicsView * > views() const
QRectF itemsBoundingRect() const
void setSelectionArea(const QPainterPath &path, const QTransform &deviceTransform)
ItemIndexMethod itemIndexMethod
the item indexing method.
void update(qreal x, qreal y, qreal w, qreal h)
QGraphicsPixmapItem * addPixmap(const QPixmap &pixmap)
QGraphicsPolygonItem * addPolygon(const QPolygonF &polygon, const QPen &pen=QPen(), const QBrush &brush=QBrush())
void setItemIndexMethod(ItemIndexMethod method)
virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const
void setSceneRect(const QRectF &rect)
QGraphicsRectItem * addRect(const QRectF &rect, const QPen &pen=QPen(), const QBrush &brush=QBrush())
void sceneRectChanged(const QRectF &rect)
QBrush backgroundBrush
the background brush of the scene.
virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event)
virtual bool focusNextPrevChild(bool next)
bool focusOnTouch
whether items gain focus when receiving a {touch begin} event.
virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event)
QPalette palette
the scene's default palette
void setActiveWindow(QGraphicsWidget *widget)
QList< QGraphicsItem * > collidingItems(const QGraphicsItem *item, Qt::ItemSelectionMode mode=Qt::IntersectsItemShape) const
QPainterPath selectionArea() const
QFont font
the scene's default font
QGraphicsItemGroup * createItemGroup(const QList< QGraphicsItem * > &items)
QGraphicsWidget * activeWindow() const
virtual void keyPressEvent(QKeyEvent *event)
QGraphicsLineItem * addLine(const QLineF &line, const QPen &pen=QPen())
friend class QGraphicsSceneBspTreeIndex
virtual void inputMethodEvent(QInputMethodEvent *event)
void setBackgroundBrush(const QBrush &brush)
virtual void focusOutEvent(QFocusEvent *event)
QGraphicsTextItem * addText(const QString &text, const QFont &font=QFont())
virtual void keyReleaseEvent(QKeyEvent *event)
void setMinimumRenderSize(qreal minSize)
void setFocus(Qt::FocusReason focusReason=Qt::OtherFocusReason)
QGraphicsItem * focusItem() const
bool event(QEvent *event) override
void render(QPainter *painter, const QRectF &target=QRectF(), const QRectF &source=QRectF(), Qt::AspectRatioMode aspectRatioMode=Qt::KeepAspectRatio)
QGraphicsSimpleTextItem * addSimpleText(const QString &text, const QFont &font=QFont())
QGraphicsItem * mouseGrabberItem() const
virtual void drawForeground(QPainter *painter, const QRectF &rect)
QGraphicsItem * itemAt(const QPointF &pos, const QTransform &deviceTransform) const
The QGraphicsSceneLinearIndex class provides an implementation of a linear indexing algorithm for dis...
The QGraphicsSceneMouseEvent class provides mouse events in the graphics view framework.
Qt::MouseButton button() const
void setButtonDownPos(Qt::MouseButton button, const QPointF &pos)
QPointF lastScenePos() const
QPointF buttonDownScenePos(Qt::MouseButton button) const
QPoint buttonDownScreenPos(Qt::MouseButton button) const
void setLastPos(const QPointF &pos)
QPoint lastScreenPos() const
Qt::KeyboardModifiers modifiers() const
void setPos(const QPointF &pos)
Qt::MouseButtons buttons() const
void setButtonDownScenePos(Qt::MouseButton button, const QPointF &pos)
void setButtonDownScreenPos(Qt::MouseButton button, const QPoint &pos)
QPointF buttonDownPos(Qt::MouseButton button) const
QList< QGraphicsItem * > cachedItemsUnderMouse
QMultiMap< QGraphicsItem *, QGraphicsItem * > sceneEventFilters
QList< QGraphicsView * > views
QHash< QGraphicsObject *, QSet< QGesture * > > cachedItemGestures
void removeSceneEventFilter(QGraphicsItem *watched, QGraphicsItem *filter)
void setScenePosItemEnabled(QGraphicsItem *item, bool enabled)
void addView(QGraphicsView *view)
void resetDirtyItem(QGraphicsItem *item, bool recursive=false)
QList< QGraphicsItem * > itemsAtPosition(const QPoint &screenPos, const QPointF &scenePos, QWidget *widget) const
void registerScenePosItem(QGraphicsItem *item)
quint32 allItemsIgnoreHoverEvents
QHash< QGesture *, QGraphicsObject * > gestureTargets
QList< QGraphicsItem * > modalPanels
QList< QGraphicsItem * > mouseGrabberItems
QPointF lastSceneMousePos
void gestureEventHandler(QGestureEvent *event)
QHash< QGraphicsObject *, QSet< QGesture * > > cachedAlreadyDeliveredGestures
QSet< QGraphicsItem * > scenePosItems
int findClosestTouchPointId(const QPointF &scenePos)
void leaveModal(QGraphicsItem *item)
QGraphicsItem * lastFocusItem
QList< QGraphicsWidget * > popupWidgets
quint32 topLevelSequentialOrdering
void ungrabMouse(QGraphicsItem *item, bool itemIsDying=false)
QStyleOptionGraphicsItem styleOptionTmp
bool sendEvent(QGraphicsItem *item, QEvent *event)
QMap< int, QEventPoint > sceneCurrentTouchPoints
void grabMouse(QGraphicsItem *item, bool implicit=false)
void addPopup(QGraphicsWidget *widget)
quint32 dirtyGrowingItemsBoundingRect
void markDirty(QGraphicsItem *item, const QRectF &rect=QRectF(), bool invalidateChildren=false, bool force=false, bool ignoreOpacity=false, bool removingItemFromScene=false, bool updateBoundingRect=false)
QList< QGraphicsItem * > unpolishedItems
static void updateTouchPointsForItem(QGraphicsItem *item, QTouchEvent *touchEvent)
void clearKeyboardGrabber()
void gestureTargetsAtHotSpots(const QSet< QGesture * > &gestures, Qt::GestureFlag flag, QHash< QGraphicsObject *, QSet< QGesture * > > *targets, QSet< QGraphicsObject * > *itemsSet=nullptr, QSet< QGesture * > *normal=nullptr, QSet< QGesture * > *conflicts=nullptr)
void removeView(QGraphicsView *view)
QMap< Qt::MouseButton, QPoint > mouseGrabberButtonDownScreenPos
QGraphicsWidget * tabFocusFirst
void ungrabGesture(QGraphicsItem *, Qt::GestureType gesture)
quint32 painterStateProtection
QHash< Qt::GestureType, int > grabbedGestures
void mousePressEventHandler(QGraphicsSceneMouseEvent *mouseEvent)
QSet< QGraphicsItem * > selectedItems
void ungrabKeyboard(QGraphicsItem *item, bool itemIsDying=false)
void enableTouchEventsOnViews()
void grabKeyboard(QGraphicsItem *item)
void installSceneEventFilter(QGraphicsItem *watched, QGraphicsItem *filter)
void updateFont(const QFont &font)
bool filterDescendantEvent(QGraphicsItem *item, QEvent *event)
void touchEventHandler(QTouchEvent *touchEvent)
QGraphicsItem * passiveFocusItem
QList< QGraphicsObject * > cachedTargetItems
QGraphicsItem * activePanel
void drawItems(QPainter *painter, const QTransform *const viewTransform, QRegion *exposedRegion, QWidget *widget)
quint32 calledEmitUpdated
void updatePalette(const QPalette &palette)
quint32 needSortTopLevelItems
static QGraphicsScenePrivate * get(QGraphicsScene *q)
QList< QGraphicsItem * > hoverItems
void setFocusItemHelper(QGraphicsItem *item, Qt::FocusReason focusReason, bool emitFocusChanged=true)
void enableMouseTrackingOnViews()
void drawItemHelper(QGraphicsItem *item, QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget, bool painterStateProtection)
bool sendTouchBeginEvent(QGraphicsItem *item, QTouchEvent *touchEvent)
QGraphicsItem * focusItem
void drawSubtreeRecursive(QGraphicsItem *item, QPainter *painter, const QTransform *const, QRegion *exposedRegion, QWidget *widget, qreal parentOpacity=qreal(1.0), const QTransform *const effectTransform=nullptr)
void _q_updateScenePosDescendants()
void setFont_helper(const QFont &font)
void unregisterTopLevelItem(QGraphicsItem *item)
void cancelGesturesForChildren(QGesture *original)
void _q_processDirtyItems()
void sendMouseEvent(QGraphicsSceneMouseEvent *mouseEvent)
void enterModal(QGraphicsItem *item, QGraphicsItem::PanelModality panelModality=QGraphicsItem::NonModal)
void registerTopLevelItem(QGraphicsItem *item)
std::set< QRectF, UpdatedRectsCmp > updatedRects
QGraphicsItem * lastMouseGrabberItem
void leaveScene(QWidget *viewport)
bool dispatchHoverEvent(QGraphicsSceneHoverEvent *hoverEvent)
QGraphicsScene::ItemIndexMethod indexMethod
quint32 processDirtyItemsEmitted
bool itemAcceptsHoverEvents_helper(const QGraphicsItem *item) const
void grabGesture(QGraphicsItem *, Qt::GestureType gesture)
quint32 scenePosDescendantsUpdatePending
QGraphicsItem * lastActivePanel
bool filterEvent(QGraphicsItem *item, QEvent *event)
QMap< Qt::MouseButton, QPointF > mouseGrabberButtonDownScenePos
void processDirtyItemsRecursive(QGraphicsItem *item, bool dirtyAncestorContainsChildren=false, qreal parentOpacity=qreal(1.0))
QGraphicsSceneIndex * index
QGraphicsItem * dragDropItem
void updateInputMethodSensitivityInViews()
QMap< int, QGraphicsItem * > itemForTouchPointId
void unregisterScenePosItem(QGraphicsItem *item)
void removeItemHelper(QGraphicsItem *item)
QList< QGraphicsItem * > keyboardGrabberItems
void sendHoverEvent(QEvent::Type type, QGraphicsItem *item, QGraphicsSceneHoverEvent *hoverEvent)
quint32 holesInTopLevelSiblingIndex
void draw(QGraphicsItem *, QPainter *, const QTransform *const, const QTransform *const, QRegion *, QWidget *, qreal, const QTransform *const, bool, bool)
void setActivePanelHelper(QGraphicsItem *item, bool duringActivationEvent)
void cloneDragDropEvent(QGraphicsSceneDragDropEvent *dest, QGraphicsSceneDragDropEvent *source)
void storeMouseButtonsForMouseGrabber(QGraphicsSceneMouseEvent *event)
QRectF growingItemsBoundingRect
QMap< Qt::MouseButton, QPointF > mouseGrabberButtonDownPos
quint32 lastMouseGrabberItemHasImplicitMouseGrab
void setPalette_helper(const QPalette &palette)
int processDirtyItemsIndex
void removePopup(QGraphicsWidget *widget, bool itemIsDying=false)
void ensureSequentialTopLevelSiblingIndexes()
QList< QGraphicsItem * > topLevelItems
void sendDragDropEvent(QGraphicsItem *item, QGraphicsSceneDragDropEvent *dragDropEvent)
The QGraphicsSceneWheelEvent class provides wheel events in the graphics view framework.
The QGraphicsSimpleTextItem class provides a simple text path item that you can add to a QGraphicsSce...
The QGraphicsTextItem class provides a text item that you can add to a QGraphicsScene to display form...
The QGraphicsView class provides a widget for displaying the contents of a QGraphicsScene.
bool isTransformed() const
QTransform viewportTransform() const
@ DontAdjustForAntialiasing
bool updateRect(const QRect &rect)
QGraphicsView::ViewportUpdateMode viewportUpdateMode
quint32 fullUpdatePending
static QPalette palette()
static QInputMethod * inputMethod()
The QHash::const_iterator class provides an STL-style const iterator for QHash.
The QHash class is a template class that provides a hash-table-based dictionary.
bool remove(const Key &key)
const_iterator constEnd() const noexcept
const_iterator constBegin() const noexcept
QList< Key > keys() const
iterator erase(const_iterator it)
bool contains(const Key &key) const noexcept
T value(const Key &key) const noexcept
void clear() noexcept(std::is_nothrow_destructible< Node >::value)
bool isEmpty() const noexcept
iterator insert(const Key &key, const T &value)
The QKeyEvent class describes a key event.
Qt::KeyboardModifiers modifiers() const
The QLineF class provides a two-dimensional vector using floating point precision.
qsizetype size() const noexcept
bool isEmpty() const noexcept
void removeAt(qsizetype i)
bool removeOne(const AT &t)
const T & constFirst() const noexcept
const_reference at(qsizetype i) const noexcept
T value(qsizetype i) const
const_reverse_iterator crbegin() const noexcept
const_iterator constBegin() const noexcept
void remove(qsizetype i, qsizetype n=1)
qsizetype removeAll(const AT &t)
qsizetype count() const noexcept
void prepend(rvalue_ref t)
void reserve(qsizetype size)
const T & constLast() const noexcept
void append(parameter_type t)
const_iterator constEnd() const noexcept
const_reverse_iterator crend() const noexcept
iterator insert(const Key &key, const T &value)
T value(const Key &key, const T &defaultValue=T()) const
iterator erase(const_iterator it)
bool contains(const Key &key) const
size_type remove(const Key &key)
const_iterator constBegin() const
const_iterator constEnd() const
iterator lowerBound(const Key &key)
bool contains(const Key &key) const
iterator insert(const Key &key, const T &value)
iterator erase(const_iterator it)
iterator upperBound(const Key &key)
The QObject class is the base class of all Qt objects.
virtual bool event(QEvent *event)
QScopedPointer< QObjectData > d_ptr
bool isSignalConnected(uint signalIdx, bool checkDeclarative=true) const
int signalIndex(const char *signalName, const QMetaObject **meta=nullptr) const
qreal devicePixelRatio() const
virtual int devType() const
The QPainter class performs low-level painting on widgets and other paint devices.
Qt::LayoutDirection layoutDirection() const
RenderHints renderHints() const
void drawRect(const QRectF &rect)
QPaintDevice * device() const
void setClipRect(const QRectF &, Qt::ClipOperation op=Qt::ReplaceClip)
void setPen(const QColor &color)
bool begin(QPaintDevice *)
void setBrushOrigin(int x, int y)
void setClipPath(const QPainterPath &path, Qt::ClipOperation op=Qt::ReplaceClip)
void setLayoutDirection(Qt::LayoutDirection direction)
const QTransform & worldTransform() const
const QBrush & brush() const
void setOpacity(qreal opacity)
void setCompositionMode(CompositionMode mode)
void setWorldTransform(const QTransform &matrix, bool combine=false)
void drawPixmap(const QRectF &targetRect, const QPixmap &pixmap, const QRectF &sourceRect)
void setBrush(const QBrush &brush)
void translate(const QPointF &offset)
void setRenderHints(RenderHints hints, bool on=true)
void fillRect(const QRectF &, const QBrush &)
void setClipRegion(const QRegion &, Qt::ClipOperation op=Qt::ReplaceClip)
The QPainterPath class provides a container for painting operations, enabling graphical shapes to be ...
The QPalette class contains color groups for each widget state.
void setResolveMask(ResolveMask mask)
ResolveMask resolveMask() const
QPalette resolve(const QPalette &other) const
const QBrush & window() const
static bool pathToRect(const QPainterPath &path, QRectF *rect=nullptr)
The QPen class defines how a QPainter should draw lines and outlines of shapes.
The QPixmapCache::Key class can be used for efficient access to the QPixmapCache. \inmodule QtGui.
static bool find(const QString &key, QPixmap *pixmap)
static void remove(const QString &key)
static bool insert(const QString &key, const QPixmap &pixmap)
The QPixmap class is an off-screen image representation that can be used as a paint device.
void setDevicePixelRatio(qreal scaleFactor)
void fill(const QColor &fillColor=Qt::white)
qreal devicePixelRatio() const
The QPointF class defines a point in the plane using floating point precision.
constexpr QPoint toPoint() const
The QPoint class defines a point in the plane using integer precision.
constexpr int x() const noexcept
constexpr int y() const noexcept
const QPointingDevice * pointingDevice() const
const QList< QEventPoint > & points() const
The QPointer class is a template class that provides guarded pointers to QObject.
The QPolygonF class provides a list of points using floating point precision. \inmodule QtGui.
The QRectF class defines a finite rectangle in the plane using floating point precision.
constexpr bool isEmpty() const noexcept
QRect toAlignedRect() const noexcept
constexpr qreal height() const noexcept
constexpr qreal width() const noexcept
constexpr QRectF translated(qreal dx, qreal dy) const noexcept
constexpr QRectF adjusted(qreal x1, qreal y1, qreal x2, qreal y2) const noexcept
constexpr qreal left() const noexcept
constexpr bool isNull() const noexcept
constexpr QRect toRect() const noexcept
constexpr qreal top() const noexcept
constexpr void setRect(qreal x, qreal y, qreal w, qreal h) noexcept
The QRect class defines a rectangle in the plane using integer precision.
constexpr bool isEmpty() const noexcept
bool intersects(const QRect &r) const noexcept
constexpr void adjust(int x1, int y1, int x2, int y2) noexcept
constexpr int height() const noexcept
QRect normalized() const noexcept
constexpr bool isNull() const noexcept
constexpr QPoint topLeft() const noexcept
constexpr QRect adjusted(int x1, int y1, int x2, int y2) const noexcept
constexpr int top() const noexcept
bool contains(const QRect &r, bool proper=false) const noexcept
constexpr int left() const noexcept
constexpr int x() const noexcept
constexpr QSize size() const noexcept
constexpr void translate(int dx, int dy) noexcept
constexpr int width() const noexcept
constexpr int y() const noexcept
The QRegion class specifies a clip region for a painter.
QRect boundingRect() const noexcept
int rectCount() const noexcept
bool intersects(const QRegion &r) const
T * data() const noexcept
QList< T > values() const
bool remove(const T &value)
iterator erase(const_iterator i)
bool contains(const T &value) const
iterator insert(const T &value)
The QSizeF class defines the size of a two-dimensional object using floating point precision.
The QSize class defines the size of a two-dimensional object using integer point precision.
constexpr int height() const noexcept
constexpr int width() const noexcept
constexpr bool isEmpty() const noexcept
constexpr bool isValid() const noexcept
The QString class provides a Unicode character string.
The QStyle class is an abstract base class that encapsulates the look and feel of a GUI.
The QStyleOptionGraphicsItem class is used to describe the parameters needed to draw a QGraphicsItem.
QEventPoint & point(int touchId)
QMap< int, QEventPoint > points
The QTouchEvent class contains parameters that describe a touch event.
The QVariant class acts like a union for the most common Qt data types.
backing_store_ptr info
[4]
typename C::iterator iterator
QHighDpiScaling::Point position(T, QHighDpiScaling::Point::Kind)
void mousePress(QWindow *window, Qt::MouseButton button, Qt::KeyboardModifiers stateKey=Qt::KeyboardModifiers(), QPoint pos=QPoint(), int delay=-1)
QTouchEventSequence touchEvent(QWindow *window, QPointingDevice *device, bool autoCommit=true)
@ KeepAspectRatioByExpanding
@ IntersectsItemBoundingRect
@ IgnoredGesturesPropagateToParent
constexpr Initialization Uninitialized
@ ActiveWindowFocusReason
set set set set set set set macro pixldst1 abits if abits op else op endif endm macro pixldst2 abits if abits op else op endif endm macro pixldst4 abits if abits op else op endif endm macro pixldst0 abits op endm macro pixldst3 mem_operand op endm macro pixldst30 mem_operand op endm macro pixldst abits if abits elseif abits elseif abits elseif abits elseif abits pixldst0 abits else pixldst0 abits pixldst0 abits pixldst0 abits pixldst0 abits endif elseif abits else pixldst0 abits pixldst0 abits endif elseif abits else error unsupported bpp *numpix else pixst endif endm macro vuzp8 reg2 vuzp d d ®2 endm macro vzip8 reg2 vzip d d ®2 endm macro pixdeinterleave basereg basereg basereg basereg basereg endif endm macro pixinterleave basereg basereg basereg basereg basereg endif endm macro PF boost_increment endif if endif PF tst PF addne PF subne PF cmp ORIG_W if endif if endif if endif PF subge ORIG_W PF subges if endif if endif if endif endif endm macro cache_preload_simple endif if dst_r_bpp pld[DST_R, #(PREFETCH_DISTANCE_SIMPLE *dst_r_bpp/8)] endif if mask_bpp pld if[MASK, #(PREFETCH_DISTANCE_SIMPLE *mask_bpp/8)] endif endif endm macro ensure_destination_ptr_alignment process_pixblock_tail_head if beq irp skip1(dst_w_bpp<=(lowbit *8)) &&((lowbit *8)<(pixblock_size *dst_w_bpp)) .if lowbit< 16 tst DST_R
[3]
std::pair< T1, T2 > QPair
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter * iter
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char * method
EGLOutputLayerEXT EGLint EGLAttrib value
const EGLAttrib EGLOutputLayerEXT * layers
bool qFuzzyIsNull(qfloat16 f) noexcept
QT_END_INCLUDE_NAMESPACE typedef double qreal
bool qt_closestItemFirst(const QGraphicsItem *item1, const QGraphicsItem *item2)
QT_BEGIN_NAMESPACE bool qt_sendSpontaneousEvent(QObject *receiver, QEvent *event)
#define ENSURE_TRANSFORM_PTR
GLuint GLfloat GLfloat GLfloat GLfloat GLfloat z
GLint GLint GLint GLint GLint x
[0]
GLint GLenum GLsizei GLsizei GLsizei depth
GLint GLsizei GLsizei height
GLenum GLenum GLsizei const GLuint GLboolean enabled
GLsizei GLsizei GLfloat distance
GLint GLint GLint GLint GLint GLint GLint GLbitfield GLenum filter
GLsizei GLsizei GLchar * source
GLuint GLenum GLenum transform
GLdouble GLdouble GLdouble GLdouble q
GLsizei const GLchar *const * path
GLfixed GLfixed GLint GLint order
GLenum GLenum GLenum GLenum GLenum scale
#define Q_ASSERT_X(cond, x, msg)
QFileInfo fi("c:/temp/foo")
[newstuff]
obj metaObject() -> className()
view viewport() -> scroll(dx, dy, deviceRect)
rect deviceTransform(view->viewportTransform()).map(QPointF(0
qsizetype indexOf(const AT &t, qsizetype from=0) const noexcept
bool contains(const AT &t) const noexcept
qsizetype lastIndexOf(const AT &t, qsizetype from=-1) const noexcept
QThreadStorage< int * > dummy[8]
IUIAutomationTreeWalker __RPC__deref_out_opt IUIAutomationElement ** parent