QGraphicsScene类

QGraphicsScene类提供了一个用于管理大量2D图形项目的界面。

Header:#include <QGraphicsScene>
CMake:find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake:QT += widgets
Inherits:QObject

详细描述>>>


Public Types

enumItemIndexMethod { BspTreeIndex, NoIndex }
enumSceneLayer { ItemLayer, BackgroundLayer, ForegroundLayer, AllLayers }
flagsSceneLayers

Properties

此属性保存该场景的背景笔刷。

设置此属性,可将场景的背景更改为不同的颜色、渐变或纹理。默认的背景笔刷是Qt::NoBrush。背景被绘制在项目的前面(后面)。

QGraphicsScene scene;
QGraphicsView view(&scene);
view.show();

// a blue background
scene.setBackgroundBrush(Qt::blue);

// a gradient background
QRadialGradient gradient(0, 0, 10);
gradient.setSpread(QGradient::RepeatSpread);
scene.setBackgroundBrush(gradient);

QGraphicsScene::render() 调用绘制背景drawBackground() 来绘制场景背景。要更详细地控制如何绘制的背景,您可以在图形场景QGraphicsScene的子类中重新实现 drawBackground() 。

访问函数:

QBrushbackgroundBrush() const
voidsetBackgroundBrush(const QBrush &brush)

此属性保存QGraphicsScene的BSP索引树的深度

当使用NoIndex时,此属性无效。

此值决定QGraphicsScene的BSP树的深度。深度直接影响QGraphicsScene的性能和内存使用;后者随着树的深度呈指数级增长。有了合适树形深度,场景可以立即确定项目的位置,即使是有数千或数百万个图形元素的场景。

默认情况下,该值为0,在这种情况下,Qt将根据场景中图形的大小、位置和数量来猜测一个合理的默认深度。但如果这些参数频繁变化,那么在内部重新调整深度时,速度可能会变慢。您可以通过设置此属性来固定树的深度来避免潜在的减速。

树的深度和场景矩形的大小决定了场景划分的粒度。每个场景段的大小由以下算法确定:

QSizeF segmentSize = sceneRect().size() / pow(2, depth - 1);

当每个段包含 0 到 10 个项目时,BSP 树具有最佳大小。

访问函数:

intbspTreeDepth() const
voidsetBspTreeDepth(int depth)

这是一个与触控板相关的属性,它记录着在接收到触摸开始事件时,项目是否获得焦点。

访问函数:

boolfocusOnTouch() const
voidsetFocusOnTouch(bool enabled)

此属性保存场景的默认字体,场景字体默认为QApplication::font

如果场景的字体发生更改,无论是直接通过 setFont() 还是间接更改应用程序字体,QGraphicsScene都会首先向自身发送一个FontChange 事件,然后将此事件发送到场景中的所有顶级控件。这些项目通过将自己的字体解析到场景中来做出响应,然后它们会通知其子项,子项会再次通知其子项,依此类推,直到所有控件都更新了字体。

更改场景字体(直接或间接通过QApplication::setFont())自动安排重新绘制整个场景。

Access functions:

QFontfont() const
voidsetFont(const QFont &font)

Public Functions

QGraphicsScene(QObject *parent = nullptr)
QGraphicsScene(const QRectF &sceneRect, QObject *parent = nullptr)
QGraphicsScene(qreal x, qreal y, qreal width, qreal height, QObject *parent = nullptr)
virtual~QGraphicsScene()
QGraphicsItem *activePanel() const
QGraphicsWidget *activeWindow() const
QGraphicsEllipseItem *addEllipse(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush())
QGraphicsEllipseItem *addEllipse(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush())
voidaddItem(QGraphicsItem *item)
QGraphicsLineItem *addLine(const QLineF &line, const QPen &pen = QPen())
QGraphicsLineItem *addLine(qreal x1, qreal y1, qreal x2, qreal y2, const QPen &pen = QPen())
QGraphicsPathItem *addPath(const QPainterPath &path, const QPen &pen = QPen(), const QBrush &brush = QBrush())
QGraphicsPixmapItem *addPixmap(const QPixmap &pixmap)
QGraphicsPolygonItem *addPolygon(const QPolygonF &polygon, const QPen &pen = QPen(), const QBrush &brush = QBrush())
QGraphicsRectItem *addRect(const QRectF &rect, const QPen &pen = QPen(), const QBrush &brush = QBrush())
QGraphicsRectItem *addRect(qreal x, qreal y, qreal w, qreal h, const QPen &pen = QPen(), const QBrush &brush = QBrush())
QGraphicsSimpleTextItem *addSimpleText(const QString &text, const QFont &font = QFont())
QGraphicsTextItem *addText(const QString &text, const QFont &font = QFont())
QGraphicsProxyWidget *addWidget(QWidget *widget, Qt::WindowFlags wFlags = Qt::WindowFlags())
QBrushbackgroundBrush() const
intbspTreeDepth() const
voidclearFocus()
QList<QGraphicsItem *>collidingItems(const QGraphicsItem *item, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape) const
QGraphicsItemGroup *createItemGroup(const QList<QGraphicsItem *> &items)
voiddestroyItemGroup(QGraphicsItemGroup *group)
QGraphicsItem *focusItem() const
boolfocusOnTouch() const
QFontfont() const
QBrushforegroundBrush() const
boolhasFocus() const
qrealheight() const
virtual QVariantinputMethodQuery(Qt::InputMethodQuery query) const
voidinvalidate(qreal x, qreal y, qreal w, qreal h, QGraphicsScene::SceneLayers layers = AllLayers)
boolisActive() const
QGraphicsItem *itemAt(const QPointF &position, const QTransform &deviceTransform) const
QGraphicsItem *itemAt(qreal x, qreal y, const QTransform &deviceTransform) const
QGraphicsScene::ItemIndexMethoditemIndexMethod() const
QList<QGraphicsItem *>items(Qt::SortOrder order = Qt::DescendingOrder) const
QList<QGraphicsItem *>items(const QPointF &pos, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
QList<QGraphicsItem *>items(const QRectF &rect, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
QList<QGraphicsItem *>items(const QPolygonF &polygon, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
QList<QGraphicsItem *>items(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, Qt::SortOrder order = Qt::DescendingOrder, const QTransform &deviceTransform = QTransform()) const
QList<QGraphicsItem *>items(qreal x, qreal y, qreal w, qreal h, Qt::ItemSelectionMode mode, Qt::SortOrder order, const QTransform &deviceTransform = QTransform()) const
QRectFitemsBoundingRect() const
qrealminimumRenderSize() const
QGraphicsItem *mouseGrabberItem() const
QPalettepalette() const
voidremoveItem(QGraphicsItem *item)
voidrender(QPainter *painter, const QRectF &target = QRectF(), const QRectF &source = QRectF(), Qt::AspectRatioMode aspectRatioMode = Qt::KeepAspectRatio)
QRectFsceneRect() const
QList<QGraphicsItem *>selectedItems() const
QPainterPathselectionArea() const
boolsendEvent(QGraphicsItem *item, QEvent *event)
voidsetActivePanel(QGraphicsItem *item)
voidsetActiveWindow(QGraphicsWidget *widget)
voidsetBackgroundBrush(const QBrush &brush)
voidsetBspTreeDepth(int depth)
voidsetFocus(Qt::FocusReason focusReason = Qt::OtherFocusReason)
voidsetFocusItem(QGraphicsItem *item, Qt::FocusReason focusReason = Qt::OtherFocusReason)
voidsetFocusOnTouch(bool enabled)
voidsetFont(const QFont &font)
voidsetForegroundBrush(const QBrush &brush)
voidsetItemIndexMethod(QGraphicsScene::ItemIndexMethod method)
voidsetMinimumRenderSize(qreal minSize)
voidsetPalette(const QPalette &palette)
voidsetSceneRect(const QRectF &rect)
voidsetSceneRect(qreal x, qreal y, qreal w, qreal h)
voidsetSelectionArea(const QPainterPath &path, const QTransform &deviceTransform)
voidsetSelectionArea(const QPainterPath &path, Qt::ItemSelectionOperation selectionOperation = Qt::ReplaceSelection, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform())
voidsetStickyFocus(bool enabled)
voidsetStyle(QStyle *style)
boolstickyFocus() const
QStyle *style() const
voidupdate(qreal x, qreal y, qreal w, qreal h)
QList<QGraphicsView *>views() const
qrealwidth() const

Public Slots

voidadvance()
voidclear()
voidclearSelection()
voidinvalidate(const QRectF &rect = QRectF(), QGraphicsScene::SceneLayers layers = AllLayers)
voidupdate(const QRectF &rect = QRectF())

Signals

voidchanged(const QList<QRectF> &region)
voidfocusItemChanged(QGraphicsItem *newFocusItem, QGraphicsItem *oldFocusItem, Qt::FocusReason reason)
voidsceneRectChanged(const QRectF &rect)
voidselectionChanged()

Protected Functions

virtual voidcontextMenuEvent(QGraphicsSceneContextMenuEvent *contextMenuEvent)
virtual voiddragEnterEvent(QGraphicsSceneDragDropEvent *event)
virtual voiddragLeaveEvent(QGraphicsSceneDragDropEvent *event)
virtual voiddragMoveEvent(QGraphicsSceneDragDropEvent *event)
virtual voiddrawBackground(QPainter *painter, const QRectF &rect)
virtual voiddrawForeground(QPainter *painter, const QRectF &rect)
virtual voiddropEvent(QGraphicsSceneDragDropEvent *event)
virtual voidfocusInEvent(QFocusEvent *focusEvent)
virtual voidfocusOutEvent(QFocusEvent *focusEvent)
virtual voidhelpEvent(QGraphicsSceneHelpEvent *helpEvent)
virtual voidinputMethodEvent(QInputMethodEvent *event)
virtual voidkeyPressEvent(QKeyEvent *keyEvent)
virtual voidkeyReleaseEvent(QKeyEvent *keyEvent)
virtual voidmouseDoubleClickEvent(QGraphicsSceneMouseEvent *mouseEvent)
virtual voidmouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
virtual voidmousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
virtual voidmouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
virtual voidwheelEvent(QGraphicsSceneWheelEvent *wheelEvent)

Reimplemented Protected Functions

virtual boolevent(QEvent *event) override
virtual booleventFilter(QObject *watched, QEvent *event) override

Protected Slots

virtual boolfocusNextPrevChild(bool next)

<<< 返回根页面

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值