File indexing completed on 2026-06-14 08:33:21
0001
0002
0003
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> ®ion);
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