Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qgraphicssceneindex_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 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#ifndef QGRAPHICSSCENEINDEX_H
5#define QGRAPHICSSCENEINDEX_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists for the convenience
12// of other Qt classes. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <QtWidgets/private/qtwidgetsglobal_p.h>
20#include "qgraphicsscene.h"
21#include <private/qobject_p.h>
22
23#include <QtCore/qnamespace.h>
24#include <QtCore/qobject.h>
25#include <QtGui/qtransform.h>
26
28
29QT_BEGIN_NAMESPACE
30
31class QGraphicsSceneIndexPrivate;
32class QPointF;
33class QRectF;
34
35typedef bool (*QGraphicsSceneIndexIntersector)(const QGraphicsItem *item, const QRectF &exposeRect, Qt::ItemSelectionMode mode,
36 const QTransform &deviceTransform, const void *data);
37
38class Q_AUTOTEST_EXPORT QGraphicsSceneIndex : public QObject
39{
40 Q_OBJECT
41
42public:
43 QGraphicsSceneIndex(QGraphicsScene *scene = nullptr);
44 virtual ~QGraphicsSceneIndex();
45
46 QGraphicsScene *scene() const;
47
48 virtual QList<QGraphicsItem *> items(Qt::SortOrder order = Qt::DescendingOrder) const = 0;
49 virtual QList<QGraphicsItem *> items(const QPointF &pos, Qt::ItemSelectionMode mode,
50 Qt::SortOrder order, const QTransform &deviceTransform = QTransform()) const;
51 virtual QList<QGraphicsItem *> items(const QRectF &rect, Qt::ItemSelectionMode mode,
52 Qt::SortOrder order, const QTransform &deviceTransform = QTransform()) const;
53 virtual QList<QGraphicsItem *> items(const QPolygonF &polygon, Qt::ItemSelectionMode mode,
54 Qt::SortOrder order, const QTransform &deviceTransform = QTransform()) const;
55 virtual QList<QGraphicsItem *> items(const QPainterPath &path, Qt::ItemSelectionMode mode,
56 Qt::SortOrder order, const QTransform &deviceTransform = QTransform()) const;
57 virtual QList<QGraphicsItem *> estimateItems(const QPointF &point, Qt::SortOrder order) const;
58 virtual QList<QGraphicsItem *> estimateItems(const QRectF &rect, Qt::SortOrder order) const = 0;
59 virtual QList<QGraphicsItem *> estimateTopLevelItems(const QRectF &, Qt::SortOrder order) const;
60
61protected Q_SLOTS:
62 virtual void updateSceneRect(const QRectF &rect);
63
64protected:
65 virtual void clear();
66 virtual void addItem(QGraphicsItem *item) = 0;
67 virtual void removeItem(QGraphicsItem *item) = 0;
68 virtual void deleteItem(QGraphicsItem *item);
69
70 virtual void itemChange(const QGraphicsItem *item, QGraphicsItem::GraphicsItemChange, const void *const value);
71 virtual void prepareBoundingRectChange(const QGraphicsItem *item);
72
73 QGraphicsSceneIndex(QGraphicsSceneIndexPrivate &dd, QGraphicsScene *scene);
74
75 friend class QGraphicsScene;
76 friend class QGraphicsScenePrivate;
77 friend class QGraphicsItem;
78 friend class QGraphicsItemPrivate;
79 friend class QGraphicsSceneBspTreeIndex;
80private:
81 Q_DISABLE_COPY_MOVE(QGraphicsSceneIndex)
82 Q_DECLARE_PRIVATE(QGraphicsSceneIndex)
83};
84
86{
87 Q_DECLARE_PUBLIC(QGraphicsSceneIndex)
88public:
91
92 void init();
93 static bool itemCollidesWithPath(const QGraphicsItem *item, const QPainterPath &path, Qt::ItemSelectionMode mode);
94
95 void recursive_items_helper(QGraphicsItem *item, QRectF exposeRect,
96 QGraphicsSceneIndexIntersector intersect, QList<QGraphicsItem *> *items,
97 const QTransform &viewTransform,
98 Qt::ItemSelectionMode mode, qreal parentOpacity, const void *intersectData) const;
99 inline void items_helper(const QRectF &rect, QGraphicsSceneIndexIntersector intersect,
100 QList<QGraphicsItem *> *items, const QTransform &viewTransform,
101 Qt::ItemSelectionMode mode, Qt::SortOrder order, const void *intersectData) const;
102
103 QGraphicsScene *scene;
104};
105
107 QList<QGraphicsItem *> *items, const QTransform &viewTransform,
108 Qt::ItemSelectionMode mode, Qt::SortOrder order, const void *intersectData) const
109{
110 Q_Q(const QGraphicsSceneIndex);
111 const QList<QGraphicsItem *> tli = q->estimateTopLevelItems(rect, Qt::AscendingOrder);
112 for (int i = 0; i < tli.size(); ++i)
113 recursive_items_helper(tli.at(i), rect, intersect, items, viewTransform, mode, 1.0, intersectData);
114 if (order == Qt::DescendingOrder) {
115 const int n = items->size();
116 for (int i = 0; i < n / 2; ++i)
117 items->swapItemsAt(i, n - i - 1);
118 }
119}
120
121QT_END_NAMESPACE
122
123#endif // QGRAPHICSSCENEINDEX_H
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.
QList< QRectF > exposed
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.
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,...
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 QGraphicsProxyWidget class provides a proxy layer for embedding a QWidget in 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 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...
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.
static bool closestItemFirst_withCache(const QGraphicsItem *item1, const QGraphicsItem *item2)
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 QGraphicsSceneContextMenuEvent class provides context menu events in the graphics view framework.
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.
The QGraphicsSimpleTextItem class provides a simple text path item that you can add to a QGraphicsSce...
void _q_updateBoundingRect(const QSizeF &)
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 QGraphicsTransform class is an abstract base class for building advanced transformations on QGrap...
The QGraphicsView class provides a widget for displaying the contents of a QGraphicsScene.
friend class QPainter
friend class QWidget
Definition qpainter.h:423
\inmodule QtCore\reentrant
Definition qpoint.h:229
The QPolygonF class provides a list of points using floating point precision.
Definition qpolygon.h:96
Combined button and popup list for selecting options.
QT_REQUIRE_CONFIG(animation)
QDebug operator<<(QDebug debug, QDir::Filters filters)
Definition qdir.cpp:2462
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
Definition qdir.cpp:2462
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)
Q_DECLARE_TYPEINFO(QObjectPrivate::ConnectionList, Q_RELOCATABLE_TYPE)
QPainterPath qt_regionToPath(const QRegion &region)
Definition qregion.cpp:1016
const QTransform * transformPtr
const QTransform * effectTransform
QStyleOptionGraphicsItem * option
const QTransform * viewTransform