Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-06-14 08:33:21

0001 // Copyright (C) 2016 The Qt Company Ltd.
0002 // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
0003 // Qt-Security score:significant reason:default
0004 
0005 #ifndef QGRAPHICSSCENE_H
0006 #define QGRAPHICSSCENE_H
0007 
0008 #include <QtWidgets/qtwidgetsglobal.h>
0009 #include <QtCore/qobject.h>
0010 #include <QtCore/qpoint.h>
0011 #include <QtCore/qrect.h>
0012 #include <QtGui/qbrush.h>
0013 #include <QtGui/qfont.h>
0014 #include <QtGui/qtransform.h>
0015 #include <QtGui/qpen.h>
0016 
0017 QT_REQUIRE_CONFIG(graphicsview);
0018 
0019 QT_BEGIN_NAMESPACE
0020 
0021 class QFocusEvent;
0022 class QFont;
0023 class QFontMetrics;
0024 class QGraphicsEllipseItem;
0025 class QGraphicsItem;
0026 class QGraphicsItemGroup;
0027 class QGraphicsLineItem;
0028 class QGraphicsPathItem;
0029 class QGraphicsPixmapItem;
0030 class QGraphicsPolygonItem;
0031 class QGraphicsProxyWidget;
0032 class QGraphicsRectItem;
0033 class QGraphicsSceneContextMenuEvent;
0034 class QGraphicsSceneDragDropEvent;
0035 class QGraphicsSceneEvent;
0036 class QGraphicsSceneHelpEvent;
0037 class QGraphicsSceneHoverEvent;
0038 class QGraphicsSceneMouseEvent;
0039 class QGraphicsSceneWheelEvent;
0040 class QGraphicsSimpleTextItem;
0041 class QGraphicsTextItem;
0042 class QGraphicsView;
0043 class QGraphicsWidget;
0044 class QGraphicsSceneIndex;
0045 class QHelpEvent;
0046 class QInputMethodEvent;
0047 class QKeyEvent;
0048 class QLineF;
0049 class QPainterPath;
0050 class QPixmap;
0051 class QPointF;
0052 class QPolygonF;
0053 class QRectF;
0054 class QSizeF;
0055 class QStyle;
0056 class QStyleOptionGraphicsItem;
0057 
0058 class QGraphicsScenePrivate;
0059 class Q_WIDGETS_EXPORT QGraphicsScene : public QObject
0060 {
0061     Q_OBJECT
0062     Q_PROPERTY(QBrush backgroundBrush READ backgroundBrush WRITE setBackgroundBrush)
0063     Q_PROPERTY(QBrush foregroundBrush READ foregroundBrush WRITE setForegroundBrush)
0064     Q_PROPERTY(ItemIndexMethod itemIndexMethod READ itemIndexMethod WRITE setItemIndexMethod)
0065     Q_PROPERTY(QRectF sceneRect READ sceneRect WRITE setSceneRect)
0066     Q_PROPERTY(int bspTreeDepth READ bspTreeDepth WRITE setBspTreeDepth)
0067     Q_PROPERTY(QPalette palette READ palette WRITE setPalette)
0068     Q_PROPERTY(QFont font READ font WRITE setFont)
0069     Q_PROPERTY(bool stickyFocus READ stickyFocus WRITE setStickyFocus)
0070     Q_PROPERTY(qreal minimumRenderSize READ minimumRenderSize WRITE setMinimumRenderSize)
0071     Q_PROPERTY(bool focusOnTouch READ focusOnTouch WRITE setFocusOnTouch)
0072 
0073 public:
0074     enum ItemIndexMethod {
0075         BspTreeIndex,
0076         NoIndex = -1
0077     };
0078     Q_ENUM(ItemIndexMethod)
0079     enum SceneLayer {
0080         ItemLayer = 0x1,
0081         BackgroundLayer = 0x2,
0082         ForegroundLayer = 0x4,
0083         AllLayers = 0xffff
0084     };
0085     Q_DECLARE_FLAGS(SceneLayers, SceneLayer)
0086 
0087     QGraphicsScene(QObject *parent = nullptr);
0088     QGraphicsScene(const QRectF &sceneRect, QObject *parent = nullptr);
0089     QGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject *parent = nullptr);
0090     virtual ~QGraphicsScene();
0091 
0092     QRectF sceneRect() const;
0093     inline qreal width() const { return sceneRect().width(); }
0094     inline qreal height() const { return sceneRect().height(); }
0095     void setSceneRect(const QRectF &rect);
0096     inline void setSceneRect(qreal x, qreal y, qreal w, qreal h)
0097     { setSceneRect(QRectF(x, y, w, h)); }
0098 
0099     void render(QPainter *painter,
0100                 const QRectF &target = QRectF(), const QRectF &source = QRectF(),
0101                 Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio);
0102 
0103     ItemIndexMethod itemIndexMethod() const;
0104     void setItemIndexMethod(ItemIndexMethod method);
0105 
0106     int bspTreeDepth() const;
0107     void setBspTreeDepth(int depth);
0108 
0109     QRectF itemsBoundingRect() const;
0110 
0111     QList<QGraphicsItem *> items(Qt::SortOrder order = Qt::DescendingOrder) const;
0112 
0113     QList<QGraphicsItem *> items(const QPointF &pos, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const;
0114     QList<QGraphicsItem *> items(const QRectF &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const;
0115     QList<QGraphicsItem *> items(const QPolygonF &polygon, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const;
0116     QList<QGraphicsItem *> items(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const;
0117     inline QList<QGraphicsItem *> items(qreal x, qreal y, qreal w, qreal h, Qt::ItemSelectionMode mode, Qt::SortOrder order,
0118                                         const QTransform &deviceTransform = QTransform()) const
0119     { return items(QRectF(x, y, w, h), mode, order, deviceTransform); }
0120 
0121     QList<QGraphicsItem *> collidingItems(const QGraphicsItem *item, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const;
0122     QGraphicsItem *itemAt(const QPointF &pos, const QTransform &deviceTransform) const;
0123     inline QGraphicsItem *itemAt(qreal x, qreal y, const QTransform &deviceTransform) const
0124     { return itemAt(QPointF(x, y), deviceTransform); }
0125 
0126     QList<QGraphicsItem *> selectedItems() const;
0127     QPainterPath selectionArea() const;
0128     void setSelectionArea(const QPainterPath &path, const QTransform &deviceTransform);
0129     void setSelectionArea(const QPainterPath &path, Qt::ItemSelectionOperation selectionOperation = Qt::ReplaceSelection, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform());
0130 
0131     QGraphicsItemGroup *createItemGroup(const QList<QGraphicsItem *> &items);
0132     void destroyItemGroup(QGraphicsItemGroup *group);
0133 
0134     void addItem(QGraphicsItem *item);
0135     QGraphicsEllipseItem *addEllipse(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush());
0136     QGraphicsLineItem *addLine(const QLineF &line, const QPen &pen = QPen());
0137     QGraphicsPathItem *addPath(const QPainterPath &path, const QPen &pen = QPen(), const QBrush &brush = QBrush());
0138     QGraphicsPixmapItem *addPixmap(const QPixmap &pixmap);
0139     QGraphicsPolygonItem *addPolygon(const QPolygonF &polygon, const QPen &pen = QPen(), const QBrush &brush = QBrush());
0140     QGraphicsRectItem *addRect(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush());
0141     QGraphicsTextItem *addText(const QString &text, const QFont &font = QFont());
0142     QGraphicsSimpleTextItem *addSimpleText(const QString &text, const QFont &font = QFont());
0143     QGraphicsProxyWidget *addWidget(QWidget *widget, Qt::WindowFlags wFlags = Qt::WindowFlags());
0144     inline QGraphicsEllipseItem *addEllipse(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush())
0145     { return addEllipse(QRectF(x, y, w, h), pen, brush); }
0146     inline QGraphicsLineItem *addLine(qreal x1, qreal y1, qreal x2, qreal y2, const QPen &pen = QPen())
0147     { return addLine(QLineF(x1, y1, x2, y2), pen); }
0148     inline QGraphicsRectItem *addRect(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush())
0149     { return addRect(QRectF(x, y, w, h), pen, brush); }
0150     void removeItem(QGraphicsItem *item);
0151 
0152     QGraphicsItem *focusItem() const;
0153     void setFocusItem(QGraphicsItem *item, Qt::FocusReason focusReason = Qt::OtherFocusReason);
0154     bool hasFocus() const;
0155     void setFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason);
0156     void clearFocus();
0157 
0158     void setStickyFocus(bool enabled);
0159     bool stickyFocus() const;
0160 
0161     QGraphicsItem *mouseGrabberItem() const;
0162 
0163     QBrush backgroundBrush() const;
0164     void setBackgroundBrush(const QBrush &brush);
0165 
0166     QBrush foregroundBrush() const;
0167     void setForegroundBrush(const QBrush &brush);
0168 
0169     virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
0170 
0171     QList <QGraphicsView *> views() const;
0172 
0173     inline void update(qreal x, qreal y, qreal w, qreal h)
0174     { update(QRectF(x, y, w, h)); }
0175     inline void invalidate(qreal x, qreal y, qreal w, qreal h, SceneLayers layers = AllLayers)
0176     { invalidate(QRectF(x, y, w, h), layers); }
0177 
0178     QStyle *style() const;
0179     void setStyle(QStyle *style);
0180 
0181     QFont font() const;
0182     void setFont(const QFont &font);
0183 
0184     QPalette palette() const;
0185     void setPalette(const QPalette &palette);
0186 
0187     bool isActive() const;
0188     QGraphicsItem *activePanel() const;
0189     void setActivePanel(QGraphicsItem *item);
0190     QGraphicsWidget *activeWindow() const;
0191     void setActiveWindow(QGraphicsWidget *widget);
0192 
0193     bool sendEvent(QGraphicsItem *item, QEvent *event);
0194 
0195     qreal minimumRenderSize() const;
0196     void setMinimumRenderSize(qreal minSize);
0197 
0198     bool focusOnTouch() const;
0199     void setFocusOnTouch(bool enabled);
0200 
0201 public Q_SLOTS:
0202     void update(const QRectF &rect = QRectF());
0203     void invalidate(const QRectF &rect = QRectF(), SceneLayers layers = AllLayers);
0204     void advance();
0205     void clearSelection();
0206     void clear();
0207 
0208 protected:
0209     bool event(QEvent *event) override;
0210     bool eventFilter(QObject *watched, QEvent *event) override;
0211     virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
0212     virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
0213     virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event);
0214     virtual void dragLeaveEvent(QGraphicsSceneDragDropEvent *event);
0215     virtual void dropEvent(QGraphicsSceneDragDropEvent *event);
0216     virtual void focusInEvent(QFocusEvent *event);
0217     virtual void focusOutEvent(QFocusEvent *event);
0218     virtual void helpEvent(QGraphicsSceneHelpEvent *event);
0219     virtual void keyPressEvent(QKeyEvent *event);
0220     virtual void keyReleaseEvent(QKeyEvent *event);
0221     virtual void mousePressEvent(QGraphicsSceneMouseEvent *event);
0222     virtual void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
0223     virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
0224     virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
0225     virtual void wheelEvent(QGraphicsSceneWheelEvent *event);
0226     virtual void inputMethodEvent(QInputMethodEvent *event);
0227 
0228     virtual void drawBackground(QPainter *painter, const QRectF &rect);
0229     virtual void drawForeground(QPainter *painter, const QRectF &rect);
0230     virtual void drawItems(QPainter *painter, int numItems,
0231                            QGraphicsItem *items[],
0232                            const QStyleOptionGraphicsItem options[],
0233                            QWidget *widget = nullptr);
0234 
0235 protected Q_SLOTS:
0236     virtual bool focusNextPrevChild(bool next);
0237 
0238 Q_SIGNALS:
0239     void changed(const QList<QRectF> &region);
0240     void sceneRectChanged(const QRectF &rect);
0241     void selectionChanged();
0242     void focusItemChanged(QGraphicsItem *newFocus, QGraphicsItem *oldFocus, Qt::FocusReason reason);
0243 
0244 private:
0245     Q_DECLARE_PRIVATE(QGraphicsScene)
0246     Q_DISABLE_COPY(QGraphicsScene)
0247     Q_PRIVATE_SLOT(d_func(), void _q_emitUpdated())
0248     Q_PRIVATE_SLOT(d_func(), void _q_polishItems())
0249     Q_PRIVATE_SLOT(d_func(), void _q_processDirtyItems())
0250     Q_PRIVATE_SLOT(d_func(), void _q_updateScenePosDescendants())
0251     friend class QGraphicsItem;
0252     friend class QGraphicsItemPrivate;
0253     friend class QGraphicsObject;
0254     friend class QGraphicsView;
0255     friend class QGraphicsViewPrivate;
0256     friend class QGraphicsWidget;
0257     friend class QGraphicsWidgetPrivate;
0258     friend class QGraphicsEffect;
0259     friend class QGraphicsSceneIndex;
0260     friend class QGraphicsSceneIndexPrivate;
0261     friend class QGraphicsSceneBspTreeIndex;
0262     friend class QGraphicsSceneBspTreeIndexPrivate;
0263     friend class QGraphicsItemEffectSourcePrivate;
0264 #ifndef QT_NO_GESTURES
0265     friend class QGesture;
0266 #endif
0267 };
0268 
0269 Q_DECLARE_OPERATORS_FOR_FLAGS(QGraphicsScene::SceneLayers)
0270 
0271 QT_END_NAMESPACE
0272 
0273 #endif