![]() |
Qt 6.x
The Qt SDK
|
The QGraphicsSceneBspTreeIndex class provides an implementation of a BSP indexing algorithm for discovering items in QGraphicsScene. More...
#include <qgraphicsscenebsptreeindex_p.h>
Public Member Functions | |
QGraphicsSceneBspTreeIndex (QGraphicsScene *scene=nullptr) | |
Constructs a BSP scene index for the given scene. | |
~QGraphicsSceneBspTreeIndex () | |
QList< QGraphicsItem * > | estimateItems (const QRectF &rect, Qt::SortOrder order) const override |
Returns an estimation visible items that are either inside or intersect with the specified rect and return a list sorted using order. | |
QList< QGraphicsItem * > | estimateTopLevelItems (const QRectF &rect, Qt::SortOrder order) const override |
QList< QGraphicsItem * > | items (Qt::SortOrder order=Qt::DescendingOrder) const override |
Return all items in the BSP index and sort them using order. | |
int | bspTreeDepth () const |
void | setBspTreeDepth (int depth) |
![]() | |
QGraphicsSceneIndex (QGraphicsScene *scene=nullptr) | |
Constructs an abstract scene index for a given scene. | |
virtual | ~QGraphicsSceneIndex () |
Destroys the scene index. | |
QGraphicsScene * | scene () const |
Returns the scene of this index. | |
virtual QList< QGraphicsItem * > | items (Qt::SortOrder order=Qt::DescendingOrder) const =0 |
This pure virtual function all items in the index and sort them using order. | |
virtual QList< QGraphicsItem * > | items (const QPointF &pos, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform &deviceTransform=QTransform()) const |
Returns all visible items that, depending on mode, are at the specified pos and return a list sorted using order. | |
virtual QList< QGraphicsItem * > | items (const QRectF &rect, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform &deviceTransform=QTransform()) const |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.Returns all visible items that, depending on mode, are either inside or intersect with the specified rect and return a list sorted using order. | |
virtual QList< QGraphicsItem * > | items (const QPolygonF &polygon, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform &deviceTransform=QTransform()) const |
virtual QList< QGraphicsItem * > | items (const QPainterPath &path, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform &deviceTransform=QTransform()) const |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.Returns all visible items that, depending on mode, are either inside or intersect with the specified path and return a list sorted using order. | |
virtual QList< QGraphicsItem * > | estimateItems (const QPointF &point, Qt::SortOrder order) const |
This virtual function return an estimation of items at position point. | |
virtual QList< QGraphicsItem * > | estimateItems (const QRectF &rect, Qt::SortOrder order) const =0 |
virtual QList< QGraphicsItem * > | estimateTopLevelItems (const QRectF &, Qt::SortOrder order) const |
![]() | |
Q_INVOKABLE | QObject (QObject *parent=nullptr) |
Constructs an object with parent object parent. | |
virtual | ~QObject () |
Destroys the object, deleting all its child objects. | |
virtual bool | event (QEvent *event) |
This virtual function receives events to an object and should return true if the event e was recognized and processed. | |
virtual bool | eventFilter (QObject *watched, QEvent *event) |
Filters events if this object has been installed as an event filter for the watched object. | |
QString | objectName () const |
Q_WEAK_OVERLOAD void | setObjectName (const QString &name) |
Sets the object's name to name. | |
void | setObjectName (QAnyStringView name) |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. | |
QBindable< QString > | bindableObjectName () |
bool | isWidgetType () const |
Returns true if the object is a widget; otherwise returns false . | |
bool | isWindowType () const |
Returns true if the object is a window; otherwise returns false . | |
bool | isQuickItemType () const |
Returns true if the object is a QQuickItem; otherwise returns false . | |
bool | signalsBlocked () const noexcept |
Returns true if signals are blocked; otherwise returns false . | |
bool | blockSignals (bool b) noexcept |
If block is true, signals emitted by this object are blocked (i.e., emitting a signal will not invoke anything connected to it). | |
QThread * | thread () const |
Returns the thread in which the object lives. | |
void | moveToThread (QThread *thread) |
Changes the thread affinity for this object and its children. | |
int | startTimer (int interval, Qt::TimerType timerType=Qt::CoarseTimer) |
This is an overloaded function that will start a timer of type timerType and a timeout of interval milliseconds. | |
int | startTimer (std::chrono::milliseconds time, Qt::TimerType timerType=Qt::CoarseTimer) |
void | killTimer (int id) |
Kills the timer with timer identifier, id. | |
template<typename T > | |
T | findChild (const QString &aName=QString(), Qt::FindChildOptions options=Qt::FindChildrenRecursively) const |
Returns the child of this object that can be cast into type T and that is called name, or \nullptr if there is no such object. | |
template<typename T > | |
QList< T > | findChildren (const QString &aName, Qt::FindChildOptions options=Qt::FindChildrenRecursively) const |
Returns all children of this object with the given name that can be cast to type T, or an empty list if there are no such objects. | |
template<typename T > | |
QList< T > | findChildren (Qt::FindChildOptions options=Qt::FindChildrenRecursively) const |
This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. | |
const QObjectList & | children () const |
Returns a list of child objects. | |
void | setParent (QObject *parent) |
Makes the object a child of parent. | |
void | installEventFilter (QObject *filterObj) |
Installs an event filter filterObj on this object. | |
void | removeEventFilter (QObject *obj) |
Removes an event filter object obj from this object. | |
QMetaObject::Connection | connect (const QObject *sender, const char *signal, const char *member, Qt::ConnectionType type=Qt::AutoConnection) const |
bool | disconnect (const char *signal=nullptr, const QObject *receiver=nullptr, const char *member=nullptr) const |
bool | disconnect (const QObject *receiver, const char *member=nullptr) const |
void | dumpObjectTree () const |
Dumps a tree of children to the debug output. | |
void | dumpObjectInfo () const |
Dumps information about signal connections, etc. | |
bool | setProperty (const char *name, const QVariant &value) |
Sets the value of the object's name property to value. | |
bool | setProperty (const char *name, QVariant &&value) |
QVariant | property (const char *name) const |
Returns the value of the object's name property. | |
QList< QByteArray > | dynamicPropertyNames () const |
QBindingStorage * | bindingStorage () |
const QBindingStorage * | bindingStorage () const |
QObject * | parent () const |
Returns a pointer to the parent object. | |
bool | inherits (const char *classname) const |
Returns true if this object is an instance of a class that inherits className or a QObject subclass that inherits className; otherwise returns false . | |
Protected Slots | |
void | updateSceneRect (const QRectF &rect) override |
![]() | |
virtual void | updateSceneRect (const QRectF &rect) |
Notifies the index that the scene's scene rect has changed. | |
Protected Member Functions | |
bool | event (QEvent *event) override |
\reimp | |
void | clear () override |
void | addItem (QGraphicsItem *item) override |
Add the item into the BSP index. | |
void | removeItem (QGraphicsItem *item) override |
Remove the item from the BSP index. | |
void | prepareBoundingRectChange (const QGraphicsItem *item) override |
void | itemChange (const QGraphicsItem *item, QGraphicsItem::GraphicsItemChange change, const void *const value) override |
![]() | |
virtual void | clear () |
This virtual function removes all items in the scene index. | |
virtual void | addItem (QGraphicsItem *item)=0 |
This pure virtual function inserts an item to the scene index. | |
virtual void | removeItem (QGraphicsItem *item)=0 |
This pure virtual function removes an item to the scene index. | |
virtual void | deleteItem (QGraphicsItem *item) |
This method is called when an item has been deleted. | |
virtual void | itemChange (const QGraphicsItem *item, QGraphicsItem::GraphicsItemChange, const void *const value) |
This virtual function is called by QGraphicsItem to notify the index that some part of the item 's state changes. | |
virtual void | prepareBoundingRectChange (const QGraphicsItem *item) |
Notify the index for a geometry change of an item. | |
QGraphicsSceneIndex (QGraphicsSceneIndexPrivate &dd, QGraphicsScene *scene) | |
![]() | |
QObject * | sender () const |
Returns a pointer to the object that sent the signal, if called in a slot activated by a signal; otherwise it returns \nullptr. | |
int | senderSignalIndex () const |
int | receivers (const char *signal) const |
Returns the number of receivers connected to the signal. | |
bool | isSignalConnected (const QMetaMethod &signal) const |
virtual void | timerEvent (QTimerEvent *event) |
This event handler can be reimplemented in a subclass to receive timer events for the object. | |
virtual void | childEvent (QChildEvent *event) |
This event handler can be reimplemented in a subclass to receive child events. | |
virtual void | customEvent (QEvent *event) |
This event handler can be reimplemented in a subclass to receive custom events. | |
virtual void | connectNotify (const QMetaMethod &signal) |
virtual void | disconnectNotify (const QMetaMethod &signal) |
QObject (QObjectPrivate &dd, QObject *parent=nullptr) | |
Properties | |
int | bspTreeDepth |
the depth of the BSP index tree | |
![]() | |
QString | objectName |
the name of this object | |
Friends | |
class | QGraphicsScenePrivate |
Additional Inherited Members | |
![]() | |
void | deleteLater () |
\threadsafe | |
![]() | |
void | destroyed (QObject *=nullptr) |
This signal is emitted immediately before the object obj is destroyed, after any instances of QPointer have been notified, and cannot be blocked. | |
void | objectNameChanged (const QString &objectName, QPrivateSignal) |
This signal is emitted after the object's name has been changed. | |
![]() | |
static QMetaObject::Connection | connect (const QObject *sender, const char *signal, const QObject *receiver, const char *member, Qt::ConnectionType=Qt::AutoConnection) |
\threadsafe | |
static QMetaObject::Connection | connect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type=Qt::AutoConnection) |
template<typename Func1 , typename Func2 > | |
static QMetaObject::Connection | connect (const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::ContextTypeForFunctor< Func2 >::ContextType *context, Func2 &&slot, Qt::ConnectionType type=Qt::AutoConnection) |
template<typename Func1 , typename Func2 > | |
static QMetaObject::Connection | connect (const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, Func2 &&slot) |
static bool | disconnect (const QObject *sender, const char *signal, const QObject *receiver, const char *member) |
\threadsafe | |
static bool | disconnect (const QObject *sender, const QMetaMethod &signal, const QObject *receiver, const QMetaMethod &member) |
static bool | disconnect (const QMetaObject::Connection &) |
Disconnect a connection. | |
template<typename Func1 , typename Func2 > | |
static bool | disconnect (const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const typename QtPrivate::FunctionPointer< Func2 >::Object *receiver, Func2 slot) |
template<typename Func1 > | |
static bool | disconnect (const typename QtPrivate::FunctionPointer< Func1 >::Object *sender, Func1 signal, const QObject *receiver, void **zero) |
![]() | |
QScopedPointer< QObjectData > | d_ptr |
![]() | |
template< class T > T | qobject_cast (const QObject *object) |
Returns the given object cast to type T if the object is of type T (or of a subclass); otherwise returns \nullptr. | |
template< typename T > T | qFindChildqFindChildren (const QObject *obj, const QString &name)() |
template< typename T > QList< T > | qFindChildrenqFindChildren (const QObject *obj, const QString &name)() |
QObjectList | |
\macro Q_CLASSINFO(Name, Value) | |
The QGraphicsSceneBspTreeIndex class provides an implementation of a BSP indexing algorithm for discovering items in QGraphicsScene.
QGraphicsSceneBspTreeIndex index use a BSP(Binary Space Partitioning) implementation to discover items quickly. This implementation is very efficient for static scenes. It has a depth that you can set. The depth directly affects performance and memory usage; the latter growing exponentially with the depth of the tree. With an optimal tree depth, the index can instantly determine the locality of items, even for scenes with thousands or millions of items. This also greatly improves rendering performance.
By default, the depth value is 0, in which case Qt will guess a reasonable default depth based on the size, location and number of items in the scene. If these parameters change frequently, however, you may experience slowdowns as the index retunes the depth internally. You can avoid potential slowdowns by fixating the tree depth through setting this property.
The depth of the tree and the size of the scene rectangle decide the granularity of the scene's partitioning. The size of each scene segment is determined by the following algorithm:
The BSP tree has an optimal size when each segment contains between 0 and 10 items.
Definition at line 36 of file qgraphicsscenebsptreeindex_p.h.
QGraphicsSceneBspTreeIndex::QGraphicsSceneBspTreeIndex | ( | QGraphicsScene * | scene = nullptr | ) |
Constructs a BSP scene index for the given scene.
Definition at line 408 of file qgraphicsscenebsptreeindex.cpp.
QGraphicsSceneBspTreeIndex::~QGraphicsSceneBspTreeIndex | ( | ) |
Definition at line 414 of file qgraphicsscenebsptreeindex.cpp.
References d, QGraphicsItem::d_ptr, i, QGraphicsItemPrivate::index, item, QGraphicsItemPrivate::itemDiscovered, and Q_ASSERT.
|
overrideprotectedvirtual |
Add the item into the BSP index.
Implements QGraphicsSceneIndex.
Definition at line 452 of file qgraphicsscenebsptreeindex.cpp.
int QGraphicsSceneBspTreeIndex::bspTreeDepth | ( | ) | const |
Definition at line 561 of file qgraphicsscenebsptreeindex.cpp.
References d.
|
overrideprotectedvirtual |
Clear the all the BSP index.
Reimplemented from QGraphicsSceneIndex.
Definition at line 430 of file qgraphicsscenebsptreeindex.cpp.
References d, QGraphicsItem::d_ptr, i, QGraphicsItemPrivate::index, item, QGraphicsItemPrivate::itemDiscovered, and Q_ASSERT.
|
overridevirtual |
Returns an estimation visible items that are either inside or intersect with the specified rect and return a list sorted using order.
deviceTransform is the transformation apply to the view.
Implements QGraphicsSceneIndex.
Definition at line 496 of file qgraphicsscenebsptreeindex.cpp.
References d, estimateItems(), and rect.
Referenced by estimateItems(), and estimateTopLevelItems().
|
overridevirtual |
Reimplemented from QGraphicsSceneIndex.
Definition at line 502 of file qgraphicsscenebsptreeindex.cpp.
References d, estimateItems(), and rect.
|
overrideprotectedvirtual |
\reimp
Used to catch the timer event.
Reimplemented from QObject.
Definition at line 656 of file qgraphicsscenebsptreeindex.cpp.
References d, QObject::event(), QEvent::Timer, and QTimerEvent::timerId().
|
overrideprotectedvirtual |
This method react to the change of the item and use the value to update the BSP tree if necessary.
Reimplemented from QGraphicsSceneIndex.
Definition at line 595 of file qgraphicsscenebsptreeindex.cpp.
References QGraphicsItemPrivate::AncestorClipsChildren, QGraphicsItemPrivate::AncestorContainsChildren, QGraphicsItemPrivate::ancestorFlags, d, QGraphicsItem::d_ptr, QGraphicsItemPrivate::flags, item, QGraphicsItem::ItemClipsChildrenToShape, QGraphicsItem::ItemContainsChildrenInShape, QGraphicsItem::ItemFlagsChange, QGraphicsItem::ItemIgnoresTransformations, QGraphicsItemPrivate::itemIsUntransformable(), QGraphicsItem::ItemParentChange, and QGraphicsItem::ItemZValueChange.
|
overridevirtual |
Return all items in the BSP index and sort them using order.
Implements QGraphicsSceneIndex.
Definition at line 513 of file qgraphicsscenebsptreeindex.cpp.
References d, and QList< T >::reserve().
|
overrideprotectedvirtual |
Update the BSP when the item 's bounding rect has changed.
Reimplemented from QGraphicsSceneIndex.
Definition at line 471 of file qgraphicsscenebsptreeindex.cpp.
References QGraphicsItemPrivate::AncestorClipsChildren, QGraphicsItemPrivate::AncestorContainsChildren, QGraphicsItemPrivate::ancestorFlags, QList< T >::at(), QGraphicsItemPrivate::children, d, QGraphicsItem::d_ptr, i, QGraphicsItemPrivate::index, item, QGraphicsItemPrivate::itemIsUntransformable(), prepareBoundingRectChange(), and QList< T >::size().
Referenced by prepareBoundingRectChange().
|
overrideprotectedvirtual |
Remove the item from the BSP index.
Implements QGraphicsSceneIndex.
Definition at line 461 of file qgraphicsscenebsptreeindex.cpp.
void QGraphicsSceneBspTreeIndex::setBspTreeDepth | ( | int | depth | ) |
Definition at line 567 of file qgraphicsscenebsptreeindex.cpp.
References d.
Referenced by QGraphicsScene::setBspTreeDepth().
This method react to the rect change of the scene and reset the BSP tree index.
Definition at line 582 of file qgraphicsscenebsptreeindex.cpp.
|
friend |
Definition at line 71 of file qgraphicsscenebsptreeindex_p.h.
|
readwrite |
the depth of the BSP index tree
This value determines the depth of BSP tree. The depth directly affects performance and memory usage; the latter growing exponentially with the depth of the tree. With an optimal tree depth, the index can instantly determine the locality of items, even for scenes with thousands or millions of items. This also greatly improves rendering performance.
By default, the value is 0, in which case Qt will guess a reasonable default depth based on the size, location and number of items in the scene. If these parameters change frequently, however, you may experience slowdowns as the index retunes the depth internally. You can avoid potential slowdowns by fixating the tree depth through setting this property.
The depth of the tree and the size of the scene rectangle decide the granularity of the scene's partitioning. The size of each scene segment is determined by the following algorithm:
The BSP tree has an optimal size when each segment contains between 0 and 10 items.
Definition at line 164 of file qgraphicsscenebsptreeindex_p.h.
Referenced by QGraphicsScene::bspTreeDepth().