5#ifndef QGRAPHICSSCENEINDEX_H
6#define QGRAPHICSSCENEINDEX_H
19#include <QtWidgets/private/qtwidgetsglobal_p.h>
22#include <private/qobject_p.h>
24#include <QtCore/qnamespace.h>
25#include <QtCore/qobject.h>
26#include <QtGui/qtransform.h>
32class QGraphicsSceneIndexPrivate;
37 const QTransform &deviceTransform,
const void *data);
44 QGraphicsSceneIndex(QGraphicsScene *scene =
nullptr);
45 virtual ~QGraphicsSceneIndex();
47 QGraphicsScene *scene()
const;
49 virtual QList<QGraphicsItem *> items(Qt::SortOrder order = Qt::DescendingOrder)
const = 0;
50 virtual QList<QGraphicsItem *> items(
const QPointF &pos, Qt::ItemSelectionMode mode,
51 Qt::SortOrder order,
const QTransform &deviceTransform = QTransform())
const;
52 virtual QList<QGraphicsItem *> items(
const QRectF &rect, Qt::ItemSelectionMode mode,
53 Qt::SortOrder order,
const QTransform &deviceTransform = QTransform())
const;
54 virtual QList<QGraphicsItem *> items(
const QPolygonF &polygon, Qt::ItemSelectionMode mode,
55 Qt::SortOrder order,
const QTransform &deviceTransform = QTransform())
const;
56 virtual QList<QGraphicsItem *> items(
const QPainterPath &path, Qt::ItemSelectionMode mode,
57 Qt::SortOrder order,
const QTransform &deviceTransform = QTransform())
const;
58 virtual QList<QGraphicsItem *> estimateItems(
const QPointF &point, Qt::SortOrder order)
const;
59 virtual QList<QGraphicsItem *> estimateItems(
const QRectF &rect, Qt::SortOrder order)
const = 0;
60 virtual QList<QGraphicsItem *> estimateTopLevelItems(
const QRectF &, Qt::SortOrder order)
const;
63 virtual void updateSceneRect(
const QRectF &rect);
67 virtual void addItem(QGraphicsItem *item) = 0;
68 virtual void removeItem(QGraphicsItem *item) = 0;
69 virtual void deleteItem(QGraphicsItem *item);
71 virtual void itemChange(
const QGraphicsItem *item, QGraphicsItem::GraphicsItemChange,
const void *
const value);
72 virtual void prepareBoundingRectChange(
const QGraphicsItem *item);
74 QGraphicsSceneIndex(QGraphicsSceneIndexPrivate &dd, QGraphicsScene *scene);
76 friend class QGraphicsScene;
77 friend class QGraphicsScenePrivate;
78 friend class QGraphicsItem;
79 friend class QGraphicsItemPrivate;
80 friend class QGraphicsSceneBspTreeIndex;
82 Q_DISABLE_COPY_MOVE(QGraphicsSceneIndex)
83 Q_DECLARE_PRIVATE(QGraphicsSceneIndex)
88 Q_DECLARE_PUBLIC(QGraphicsSceneIndex)
94 static bool itemCollidesWithPath(
const QGraphicsItem *item,
const QPainterPath &path, Qt::ItemSelectionMode mode);
98 const QTransform &viewTransform,
99 Qt::ItemSelectionMode mode, qreal parentOpacity,
const void *intersectData)
const;
101 QList<QGraphicsItem *> *items,
const QTransform &viewTransform,
102 Qt::ItemSelectionMode mode, Qt::SortOrder order,
const void *intersectData)
const;
108 QList<QGraphicsItem *> *items,
const QTransform &viewTransform,
109 Qt::ItemSelectionMode mode, Qt::SortOrder order,
const void *intersectData)
const
111 Q_Q(
const QGraphicsSceneIndex);
112 const QList<QGraphicsItem *> tli = q->estimateTopLevelItems(rect, Qt::AscendingOrder);
113 for (
int i = 0; i < tli.size(); ++i)
114 recursive_items_helper(tli.at(i), rect, intersect, items, viewTransform, mode, 1.0, intersectData);
115 if (order == Qt::DescendingOrder) {
116 const int n = items->size();
117 for (
int i = 0; i < n / 2; ++i)
118 items->swapItemsAt(i, n - i - 1);
The QAbstractGraphicsShapeItem class provides a common base for all path items.
The QGraphicsEllipseItem class provides an ellipse item that you can add to a QGraphicsScene.
QHash< QPaintDevice *, DeviceData > deviceData
QHash< const QGraphicsItem *, QMap< int, QVariant > > data
The QGraphicsItemGroup class provides a container that treats a group of items as a single item.
quint32 localCollisionHack
virtual ~QGraphicsItemPrivate()
bool isOpacityNull() const
void updateChildWithGraphicsEffectFlagRecursively()
Returns a pointer to this item's effect if it has one; otherwise \nullptr.
void sendScenePosChange()
QGraphicsItem * subFocusItem
void setFocusHelper(Qt::FocusReason focusReason, bool climb, bool focusFromHide)
void invalidateChildrenSceneTransform()
virtual void setPosHelper(const QPointF &pos)
QVariant extra(Extra type) const
quint32 dirtySceneTransform
static bool insertionOrder(QGraphicsItem *a, QGraphicsItem *b)
Qt::InputMethodHints imHints
void invalidateDepthRecursively()
QList< QGraphicsItem ** > focusProxyRefs
QTransform transformToParent() const
virtual void focusScopeItemChange(bool isSubFocusItem)
void initStyleOption(QStyleOptionGraphicsItem *option, const QTransform &worldTransform, const QRegion &exposedRegion, bool allItems=false) const
QGraphicsEffect * graphicsEffect
QGraphicsItem * focusProxy
void markParentDirty(bool updateBoundingRect=false)
QGraphicsItem * focusScopeItem
void setEnabledHelper(bool newEnabled, bool explicitly, bool update=true)
void setSubFocus(QGraphicsItem *rootItem=nullptr, QGraphicsItem *stopItem=nullptr)
quint32 explicitlyDisabled
void combineTransformToParent(QTransform *x, const QTransform *viewTransform=nullptr) const
quint32 notifyInvalidated
QMap< Qt::GestureType, Qt::GestureFlags > gestureContext
bool itemIsUntransformable() const
quint32 filtersDescendantEvents
QList< ExtraStruct > extras
quint32 mayHaveChildWithGraphicsEffect
quint32 acceptedMouseButtons
quint32 dirtyChildrenBoundingRect
void updateAncestorFlag(QGraphicsItem::GraphicsItemFlag childFlag, AncestorFlag flag=NoFlag, bool enabled=false, bool root=true)
bool discardUpdateRequest(bool ignoreVisibleBit=false, bool ignoreDirtyBit=false, bool ignoreOpacity=false) const
void combineTransformFromParent(QTransform *x, const QTransform *viewTransform=nullptr) const
static QGraphicsItemPrivate * get(QGraphicsItem *item)
virtual void resetWidth()
QGraphicsItem::PanelModality panelModality
void updateAncestorFlags()
virtual void transformChanged()
bool childrenCombineOpacity() const
void appendGraphicsTransform(QGraphicsTransform *t)
void clearSubFocus(QGraphicsItem *rootItem=nullptr, QGraphicsItem *stopItem=nullptr)
void ensureSceneTransform()
void setTransformHelper(const QTransform &transform)
void ensureSceneTransformRecursive(QGraphicsItem **topMostDirtyItem)
void ensureSequentialSiblingIndex()
void removeChild(QGraphicsItem *child)
@ AncestorContainsChildren
@ AncestorFiltersChildEvents
@ AncestorHandlesChildEvents
@ AncestorIgnoresTransformations
quint32 updateDueToGraphicsEffect
QRectF sceneEffectiveBoundingRect() const
quint32 hasBoundingRegionGranularity
quint32 acceptedTouchBeginEvent
quint32 sceneTransformTranslateOnly
void remapItemPos(QEvent *event, QGraphicsItem *item)
void clearFocusHelper(bool giveFocusToParent, bool hiddenByParentPanel)
static bool movableAncestorIsSelected(const QGraphicsItem *item)
quint32 sendParentChangeNotification
QRectF effectiveBoundingRect(const QRectF &rect) const
QRectF effectiveBoundingRect(QGraphicsItem *topMostEffectItem=nullptr) const
quint32 scenePosDescendants
void updatePaintedViewBoundingRects(bool updateChildren)
bool isFullyTransparent() const
quint32 acceptTouchEvents
bool childrenClippedToShape() const
quint32 sequentialOrdering
virtual void updateSceneTransformFromParent()
virtual void siblingOrderChange()
quint32 paintedViewBoundingRectsNeedRepaint
void childrenBoundingRectHelper(QTransform *x, QRectF *rect, QGraphicsItem *topMostEffectItem)
bool hasTranslateOnlySceneTransform()
QRectF childrenBoundingRect
quint32 holesInSiblingIndex
void removeExtraItemCache()
virtual void resolvePalette(uint inheritedMask)
virtual void subFocusItemChange()
qreal effectiveOpacity() const
quint32 handlesChildEvents
quint32 notifyBoundingRectChanged
TransformData * transformData
QGraphicsItemCache * maybeExtraItemCache() const
void prependGraphicsTransform(QGraphicsTransform *t)
static const QGraphicsItemPrivate * get(const QGraphicsItem *item)
QTransform sceneTransform
virtual void resetHeight()
QHash< QWidget *, QRect > paintedViewBoundingRects
QGraphicsItemCache * extraItemCache() const
virtual void resolveFont(uint inheritedMask)
qreal combineOpacityFromParent(qreal parentOpacity) const
void unsetExtra(Extra type)
qreal calcEffectiveOpacity() const
void addChild(QGraphicsItem *child)
void setIsMemberOfGroup(bool enabled)
virtual bool isProxyWidget() const
void ensureSortedChildren()
void setVisibleHelper(bool newVisible, bool explicitly, bool update=true, bool hiddenByPanel=false)
static bool isOpacityNull(qreal opacity)
virtual void setHeight(qreal)
quint32 fullUpdatePending
The QGraphicsItem class is the base class for all graphical items in a QGraphicsScene.
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 QGraphicsPathItem class provides a path item that you can add to a QGraphicsScene.
QGraphicsPixmapItem::ShapeMode shapeMode
Qt::TransformationMode transformationMode
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 QGraphicsRotation class provides a rotation transformation around a given axis.
The QGraphicsScale class provides a scale transformation.
void removeItem(QGraphicsItem *item, bool recursive=false, bool moveToUnindexedItems=false)
void invalidateSortCache()
void addItem(QGraphicsItem *item, bool recursive=false)
void startIndexTimer(int interval=QGRAPHICSSCENE_INDEXTIMER_TIMEOUT)
QList< QGraphicsItem * > estimateItems(const QRectF &, Qt::SortOrder, bool b=false)
void _q_updateIndex()
This method will update the BSP index by removing the items from the temporary unindexed list and add...
void _q_updateSortCache()
static void sortItems(QList< QGraphicsItem * > *itemList, Qt::SortOrder order, bool cached, bool onlyTopLevelItems=false)
Sort a list of itemList in a specific order and use the cache if requested.
QList< QGraphicsItem * > unindexedItems
static bool closestItemFirst_withCache(const QGraphicsItem *item1, const QGraphicsItem *item2)
QList< int > freeItemIndexes
QList< QGraphicsItem * > untransformableItems
QList< QGraphicsItem * > indexedItems
QGraphicsSceneBspTree bsp
static bool closestItemLast_withCache(const QGraphicsItem *item1, const QGraphicsItem *item2)
static void climbTree(QGraphicsItem *item, int *stackingOrder)
The QGraphicsSceneBspTreeIndex class provides an implementation of a BSP indexing algorithm for disco...
The QGraphicsSceneDragDropEvent class provides events for drag and drop in the graphics view framewor...
The QGraphicsSceneEvent class provides a base class for all graphics view related events.
The QGraphicsSceneHelpEvent class provides events when a tooltip is requested.
The QGraphicsSceneHoverEvent class provides hover events in the graphics view framework.
static bool itemCollidesWithPath(const QGraphicsItem *item, const QPainterPath &path, Qt::ItemSelectionMode mode)
void items_helper(const QRectF &rect, QGraphicsSceneIndexIntersector intersect, QList< QGraphicsItem * > *items, const QTransform &viewTransform, Qt::ItemSelectionMode mode, Qt::SortOrder order, const void *intersectData) const
void recursive_items_helper(QGraphicsItem *item, QRectF exposeRect, QGraphicsSceneIndexIntersector intersect, QList< QGraphicsItem * > *items, const QTransform &viewTransform, Qt::ItemSelectionMode mode, qreal parentOpacity, const void *intersectData) const
~QGraphicsSceneIndexPrivate()
Destructor of private scene index.
The QGraphicsSceneIndex class provides a base class to implement a custom indexing algorithm for disc...
The QGraphicsSceneMouseEvent class provides mouse events in the graphics view framework.
The QGraphicsSceneMoveEvent class provides events for widget moving in the graphics view framework.
The QGraphicsSceneResizeEvent class provides events for widget resizing in the graphics view framewor...
The QGraphicsSceneWheelEvent class provides wheel events in the graphics view framework.
The QGraphicsScene class provides a surface for managing a large number of 2D graphical items.
void updateBoundingRect()
The QGraphicsSimpleTextItem class provides a simple text item that you can add to a QGraphicsScene.
void _q_updateBoundingRect(const QSizeF &)
void _q_ensureVisible(QRectF)
QPointF controlOffset() const
QGraphicsTextItemPrivate()
bool _q_mouseOnEdge(QGraphicsSceneMouseEvent *)
QWidgetTextControl * control
QWidgetTextControl * textControl() const
void sendControlEvent(QEvent *e)
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.
qreal width() const
Returns the width of the generated outlines.
void setWidth(qreal width)
Sets the width of the generated outline painter path to width.
\inmodule QtCore\reentrant
The QPolygonF class provides a list of points using floating point precision.
Combined button and popup list for selecting options.
QT_REQUIRE_CONFIG(animation)
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
static void formatGraphicsItemHelper(QDebug debug, const QGraphicsItem *item)
bool _qt_movableAncestorIsSelected(const QGraphicsItem *item)
static QRectF setupTextLayout(QTextLayout *layout)
QDebug operator<<(QDebug debug, const QGraphicsObject *item)
static QPainterPath qt_graphicsItem_shapeFromPath(const QPainterPath &path, const QPen &pen)
QDebug operator<<(QDebug debug, const QGraphicsItem *item)
static bool qt_QGraphicsItem_isObscured(const QGraphicsItem *item, const QGraphicsItem *other, const QRectF &rect)
bool qt_closestItemLast(const QGraphicsItem *item1, const QGraphicsItem *item2)
Returns true if item2 is on top of item1.
bool qt_closestLeaf(const QGraphicsItem *item1, const QGraphicsItem *item2)
bool qt_notclosestLeaf(const QGraphicsItem *item1, const QGraphicsItem *item2)
bool qt_closestItemFirst(const QGraphicsItem *item1, const QGraphicsItem *item2)
Returns true if item1 is on top of item2.
QT_REQUIRE_CONFIG(graphicsview)
static QRectF adjustedItemBoundingRect(const QGraphicsItem *item)
static QRectF adjustedItemEffectiveBoundingRect(const QGraphicsItem *item)
static void _q_adjustRect(QRectF *rect)
static bool QRectF_intersects(const QRectF &s, const QRectF &r)
static QT_BEGIN_NAMESPACE const int QGRAPHICSSCENE_INDEXTIMER_TIMEOUT
bool(* QGraphicsSceneIndexIntersector)(const QGraphicsItem *item, const QRectF &exposeRect, Qt::ItemSelectionMode mode, const QTransform &deviceTransform, const void *data)
QDebug operator<<(QDebug debug, QIODevice::OpenMode modes)
Q_DECLARE_TYPEINFO(QObjectPrivate::ConnectionList, Q_RELOCATABLE_TYPE)
const QTransform * transformPtr
const QTransform * effectTransform
quint32 wasDirtySceneTransform
QStyleOptionGraphicsItem * option
const QTransform * viewTransform