Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
QGraphicsSceneBspTreeIndex Class Reference

The QGraphicsSceneBspTreeIndex class provides an implementation of a BSP indexing algorithm for discovering items in QGraphicsScene. More...

#include <qgraphicsscenebsptreeindex_p.h>

+ Inheritance diagram for QGraphicsSceneBspTreeIndex:
+ Collaboration diagram for QGraphicsSceneBspTreeIndex:

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)
 
- Public Member Functions inherited from QGraphicsSceneIndex
 QGraphicsSceneIndex (QGraphicsScene *scene=nullptr)
 Constructs an abstract scene index for a given scene.
 
virtual ~QGraphicsSceneIndex ()
 Destroys the scene index.
 
QGraphicsScenescene () const
 Returns the scene of this index.
 
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.
 
- Public Member Functions inherited from QObject
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 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< QStringbindableObjectName ()
 
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).
 
QThreadthread () const
 Returns the thread in which the object lives.
 
bool moveToThread (QThread *thread QT6_DECL_NEW_OVERLOAD_TAIL)
 Changes the thread affinity for this object and its children and returns true on success.
 
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::nanoseconds time, Qt::TimerType timerType=Qt::CoarseTimer)
 
void killTimer (int id)
 Kills the timer with timer identifier, id.
 
void killTimer (Qt::TimerId id)
 
template<typename T >
findChild (QAnyStringView aName, 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 (QAnyStringView 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 >
findChild (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.
 
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 QObjectListchildren () 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< QByteArraydynamicPropertyNames () const
 
QBindingStoragebindingStorage ()
 
const QBindingStoragebindingStorage () const
 
QObjectparent () 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
 
- Protected Slots inherited from QGraphicsSceneIndex
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
 
- Protected Member Functions inherited from QGraphicsSceneIndex
virtual void deleteItem (QGraphicsItem *item)
 This method is called when an item has been deleted.
 
 QGraphicsSceneIndex (QGraphicsSceneIndexPrivate &dd, QGraphicsScene *scene)
 
- Protected Member Functions inherited from QObject
QObjectsender () 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
 
- Properties inherited from QObject
QString objectName
 the name of this object
 

Friends

class QGraphicsScenePrivate
 

Additional Inherited Members

- Public Slots inherited from QObject
void deleteLater ()
 \threadsafe
 
- Signals inherited from QObject
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 Public Member Functions inherited from QObject
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)
 
- Protected Attributes inherited from QObject
QScopedPointer< QObjectDatad_ptr
 

Detailed Description

The QGraphicsSceneBspTreeIndex class provides an implementation of a BSP indexing algorithm for discovering items in QGraphicsScene.

Since
4.6

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.

See also
QGraphicsScene, QGraphicsView, QGraphicsSceneIndex

Definition at line 36 of file qgraphicsscenebsptreeindex_p.h.

Constructor & Destructor Documentation

◆ QGraphicsSceneBspTreeIndex()

QGraphicsSceneBspTreeIndex::QGraphicsSceneBspTreeIndex ( QGraphicsScene * scene = nullptr)

Constructs a BSP scene index for the given scene.

Definition at line 408 of file qgraphicsscenebsptreeindex.cpp.

◆ ~QGraphicsSceneBspTreeIndex()

QGraphicsSceneBspTreeIndex::~QGraphicsSceneBspTreeIndex ( )

Member Function Documentation

◆ addItem()

void QGraphicsSceneBspTreeIndex::addItem ( QGraphicsItem * item)
overrideprotectedvirtual

Add the item into the BSP index.

Implements QGraphicsSceneIndex.

Definition at line 452 of file qgraphicsscenebsptreeindex.cpp.

References d, and item.

◆ bspTreeDepth()

int QGraphicsSceneBspTreeIndex::bspTreeDepth ( ) const

Definition at line 561 of file qgraphicsscenebsptreeindex.cpp.

References d.

◆ clear()

void QGraphicsSceneBspTreeIndex::clear ( )
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.

◆ estimateItems()

QList< QGraphicsItem * > QGraphicsSceneBspTreeIndex::estimateItems ( const QRectF & rect,
Qt::SortOrder order ) const
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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ estimateTopLevelItems()

QList< QGraphicsItem * > QGraphicsSceneBspTreeIndex::estimateTopLevelItems ( const QRectF & rect,
Qt::SortOrder order ) const
overridevirtual

Reimplemented from QGraphicsSceneIndex.

Definition at line 502 of file qgraphicsscenebsptreeindex.cpp.

References d, estimateItems(), and rect.

+ Here is the call graph for this function:

◆ event()

bool QGraphicsSceneBspTreeIndex::event ( QEvent * event)
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().

+ Here is the call graph for this function:

◆ itemChange()

void QGraphicsSceneBspTreeIndex::itemChange ( const QGraphicsItem * item,
QGraphicsItem::GraphicsItemChange change,
const void *const value )
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.

+ Here is the call graph for this function:

◆ items()

QList< QGraphicsItem * > QGraphicsSceneBspTreeIndex::items ( Qt::SortOrder order = Qt::DescendingOrder) const
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.

◆ prepareBoundingRectChange()

void QGraphicsSceneBspTreeIndex::prepareBoundingRectChange ( const QGraphicsItem * item)
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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ removeItem()

void QGraphicsSceneBspTreeIndex::removeItem ( QGraphicsItem * item)
overrideprotectedvirtual

Remove the item from the BSP index.

Implements QGraphicsSceneIndex.

Definition at line 461 of file qgraphicsscenebsptreeindex.cpp.

References d, and item.

◆ setBspTreeDepth()

void QGraphicsSceneBspTreeIndex::setBspTreeDepth ( int depth)

Definition at line 567 of file qgraphicsscenebsptreeindex.cpp.

References d.

◆ updateSceneRect

void QGraphicsSceneBspTreeIndex::updateSceneRect ( const QRectF & rect)
overrideprotectedslot

This method react to the rect change of the scene and reset the BSP tree index.

Definition at line 582 of file qgraphicsscenebsptreeindex.cpp.

References d, and rect.

Friends And Related Symbol Documentation

◆ QGraphicsScenePrivate

friend class QGraphicsScenePrivate
friend

Definition at line 71 of file qgraphicsscenebsptreeindex_p.h.

Property Documentation

◆ bspTreeDepth

QGraphicsSceneBspTreeIndex::bspTreeDepth
readwrite

the depth of the BSP index tree

Since
4.6

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 39 of file qgraphicsscenebsptreeindex_p.h.


The documentation for this class was generated from the following files: