5#ifndef QGRAPHICSSCENELINEARINDEX_H
6#define QGRAPHICSSCENELINEARINDEX_H
19#include <QtWidgets/private/qtwidgetsglobal_p.h>
21#include <QtCore/qrect.h>
22#include <QtCore/qlist.h>
23#include <QtWidgets/qgraphicsitem.h>
24#include <private/qgraphicssceneindex_p.h>
35 QGraphicsSceneLinearIndex(QGraphicsScene *scene =
nullptr) : QGraphicsSceneIndex(scene), m_numSortedElements(0)
38 QList<QGraphicsItem *> items(Qt::SortOrder order = Qt::DescendingOrder)
const override
39 { Q_UNUSED(order);
return m_items; }
41 virtual QList<QGraphicsItem *> estimateItems(
const QRectF &rect, Qt::SortOrder order)
const override
49 virtual void clear() override
52 m_numSortedElements = 0;
55 virtual void addItem(QGraphicsItem *item) override
58 virtual void removeItem(QGraphicsItem *item) override
61 if (m_numSortedElements < m_items.size())
63 std::sort(m_items.begin() + m_numSortedElements, m_items.end() );
64 std::inplace_merge(m_items.begin(), m_items.begin() + m_numSortedElements, m_items.end());
65 m_numSortedElements = m_items.size();
68 QList<QGraphicsItem*>::iterator element = std::lower_bound(m_items.begin(), m_items.end(), item);
69 if (element != m_items.end() && *element == item)
71 m_items.erase(element);
72 --m_numSortedElements;
77 QList<QGraphicsItem*> m_items;
78 int m_numSortedElements;
The QGraphicsSceneLinearIndex class provides an implementation of a linear indexing algorithm for dis...
QT_REQUIRE_CONFIG(animation)
QT_REQUIRE_CONFIG(graphicsview)
static void setClip(QPainter *painter, QGraphicsItem *item)
static void _q_hoverFromMouseEvent(QGraphicsSceneHoverEvent *hover, const QGraphicsSceneMouseEvent *mouseEvent)
static void setWorldTransform(QPainter *painter, const QTransform *const transformPtr, const QTransform *effectTransform)
static bool transformIsSimple(const QTransform &transform)
#define ENSURE_TRANSFORM_PTR
static void _q_paintItem(QGraphicsItem *item, QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget, bool useWindowOpacity, bool painterStateProtection)
static bool updateHelper(QGraphicsViewPrivate *view, QGraphicsItemPrivate *item, const QRectF &rect, bool itemIsUntransformable)
static void _q_paintIntoCache(QPixmap *pix, QGraphicsItem *item, const QRegion &pixmapExposed, const QTransform &itemToPixmap, QPainter::RenderHints renderHints, const QStyleOptionGraphicsItem *option, bool painterStateProtection)