QGraphicsScene类

QT之QGraphicsScene详细介绍 是 Qt GUI 库中的一个核心类,它是 QGraphicsView 的幕后数据模型,用于存储和管理二维图形元素。它可以容纳多种类型的图形项,包括但不限于基本形状(如矩形、圆形等)、图片、文本以及自定义的 QGraphicsItem 子类。关键特性:图形项管理:QGraphicsScene 负责管理其上的所有图形项,这些项可以通过调用 addXXX 方法(如 addRect、addEllipse 等)添加。事件处理:场景能捕获并处理来自鼠标和键盘的事件,然后将这些事件分发给相应的图形项,实现交互性。 阅读详情

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)

<<< 返回根页面

QT中GraphicsView编程 QGraphicsItem是图元的基类。自定义图元,首先应该继承QGraphicsItem,然后重写他的两个纯虚公共函数boundingRect()和paint(),boundingRect()函数返回绘制图元大概的区域,paint()函数用来绘制图元内容。 阅读详情

相关推荐

QT 笔记 QGraphicsScene介绍

QT QGraphicsScene类介绍 分别介绍了以下内容: 1. 类说明 2. 公共属性 3. 公共函数 4. 设置相关的函数 5. 槽函数 6. 信号量 7. Event事件

别看了,就这些信息 2792

Qt图形视图框架:QGraphicsScene详解

一、描述 1、场景提供了一个用于管理大量2D图形项的平面。该类充当图形项的容器。 它与视图一起用于可视化2D曲面上的图形图形项。 2、场景没有自己的视觉外观,只负责管理图形项。 3、场景的最大优势之一就是其快速有效地定位图形项的能力。即使场景中有数百万个图形项。 4、场景的另一个职责是传播来自视图的事件。要将事件发送到场景,可以构造一个继承QEvent的事件,然后使用QApplication::sendEvent()将其发送。event()负责将事件调度到各个图形项。 二、类型成员 1、QGra

友善啊,朋友的博客 3万+

Qt图形编辑类使用总结-QGraphicsView、QGraphicsScene类及QGraphicsItem类

QGraphicsView 类本身负责渲染和显示图形场景 (QGraphicsScene),而场景则负责存储和管理所有的图形项 (QGraphicsItem),这些图形项可以是文本、形状、图片等任何可视化元素。

qq_37464701的博客 769

图形视图框架QGraphicsScene(场景,概念)

该类充当 QGraphicsItems 的容器。它与 QGraphicsView 一起使用,用于在 2D 表面上可视化图形项目,例如线条、矩形、文本甚至自定义项目。创建一个椭圆项添加到项目中返回QGraphicsEllipseItem*添加项目,使用QGraphicsItem*添加创建一个线段项添加到项目中返回QGraphicsLineItem*创建一个路径项添加到项目中返回QGraphicsPathItem*创建一个图片项添加到项目中返回QGraphicsPixmapItem*创建一个多边形项添加到项目中

qq_45303986的博客 3803

Qt QGraphicsScene、QGraphicsView类实现仪表盘

Qt QGraphicsScene、QGraphicsView类实现仪表盘 【1】UI界面设计 【2】效果 【3】QGraphicsScene简介 【4】QGraphicsEllipseItem简介 【5】QGraphicsPolygonItem简介 【6】QGraphicsLineItem简介 【7】仪表源码 头文件 源码

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 2732

基于Apache SeaTunnel构建CDC数据同步管道

Apache SeaTunnel是一个数据集成开发平台,其发展经历了几个重要阶段:ETL时代(90年代):面向结构化数据库的数据同步,用于构建数据仓库。MPP和分布式技术流行:使用技术如Hive进行数据仓库的构建。此阶段主要使用mapreduce程序进行数据搬运和转换。数据湖技术流行:重视数据集成,强调先同步数据至数据湖仓储,再进行业务面向的转换和设计。CDC,即变更数据捕获,是一种捕获数据库变更事件(如插入、更新、删除)的技术。

weixin_54625990的博客 2172

QgraphicsScene类

概述 QgraphicsScene类为管理大量的2D图形item提供了一个管理界面,做为item的容器,它配合使用QgraphicsView使用来观察items,例如线,矩形,文本或者自定义的items, QgraphicsScene提供了方便的函数来让你高效的找到items的位置,或者决定在scene上哪个item可以看到,配合QgraphicsView窗口,你可以让可见scene,或者缩放

fqx111的专栏 1274

PLC编程入门基础知识

PLC即为可编程逻辑控制器,实质是一种专用于工业控制的计算机,其硬件结构基本上与微型计算机相同。

SANRENYIXING的博客 2万+

Qt 之QGraphicsView类、QGraphicsScene类、QGraphicsItem类、QDataWidgetMapper类的用法示例

示例概述 本示例用到model\view模型:model类是用QSqlRelationalTableModel,view相当于由三个小部件组成,分别是label、comboBox、texEdit,把数据模型中的数据通过QDataWidgetMapper类绑定到上面三个小部件上。 本示例还用到图形视图类QGraphicsView,图形场景场QGraphicsScene、图形项目类QGraphicsItem之前的关系及用法,场景类QGraphicsScene对象必须设置到QGraphicsView对象里

mabiao0825的博客 2353

熵权法+TOPSIS完整教学:用Python评估大学科研实力(含雷达图绘制技巧)

本文提供了一套完整的熵权法与TOPSIS综合评价方法在Python中的实现教程,以高校科研实力评估为例,详细讲解了从数据预处理、客观权重计算、综合排序到结果可视化的全流程。重点介绍了如何利用Python进行数据清洗与转换,通过熵权法自动确定指标权重,并结合TOPSIS模型计算各院校与理想解的相对接近度进行排名。教程还包含了使用Matplotlib绘制专业雷达图的技巧,帮助读者直观呈现多维数据的对比分析结果,适用于各类多指标决策与绩效评估场景。

weixin_28520495的博客 416

在 dell precision 7920 tower CentOS 8 Stream 上安裝nvidia驱动程序、Anaconda

简单记录一下如何在实验室dell precision 7920 tower CentOS 8 Stream上安装nvidia显卡驱动。

chen9046的博客 995

QGraphicsScene类详细介绍

是 PyQt5 中用于管理 ​的容器类,属于 Qt 图形视图框架(Graphics View Framework)的一部分。它提供高效管理大量图形项、事件处理、碰撞检测等功能,适用于复杂绘图、数据可视化、游戏开发等场景。

wanglaqqqq的博客 668

STC8单片机高精度EV1527解码实战:定时器捕获+状态机抗干扰方案

EV1527是一种广泛应用于433MHz无线遥控的曼彻斯特编码协议,其核心在于对脉宽时序(如同步头、逻辑0/1)的微秒级精确识别。传统外部中断+延时判别方式受MCU中断延迟、编译优化及环境噪声影响,极易导致误码;而基于硬件定时器输入捕获的解码方案,将时间测量交由硬件完成,显著提升时序鲁棒性与温度/电压适应性。该技术适用于STC8等无专用无线解码外设的8位单片机,在智能开关、晾衣架、车库门控等IoT终端中实现低至0.003%的稳定误码率。本文聚焦STC8H系列利用T1定时器下降沿捕获与有限状态机协同解码EV1

weixin_29188997的博客 181

图形视图(02):【类】QGraphicsScene [官翻]

文章目录详述事件处理和传播公共类型enum ItemIndexMethodenum SceneLayer属性backgroundBrush: QBrushbspTreeDepth: intfocusOnTouch: boolfont: QFontforegroundBrush: QBrushitemIndexMethod: ItemIndexMethodminimumRenderSize: qrealpalette: QPalette**sceneRect**: QRectFstickyFocus: boo

读书笔记 3914

Word2vec核心模型精讲:CBOW与Skip-gram

Word2vec是Google提出的词向量模型,通过CBOW和Skip-gram两种神经网络架构将词汇映射到低维向量空间。CBOW通过上下文预测中心词,训练速度快但高频词表现更好;Skip-gram则相反,通过中心词预测上下文,适合处理生僻词。为解决softmax计算效率问题,Word2vec引入基于哈夫曼树的Hierarchical Softmax优化技术,将复杂度从O(V)降至O(logV)。文章详细解析了两种模型的原理差异,并演示了哈夫曼树的构造过程及其在词向量训练中的关键作用,这种结合词频的优

Trisyp的博客 530

YOLOv11改进策略【损失函数篇】| 替换激活函数为Mish、PReLU、Hardswish、LeakyReLU、ReLU6

在卷积神经网络中,激活函数通过在神经网络中引入非线性,使网络能够学习和逼近复杂函数,从而处理复杂的模式识别与分类问题。

Limiiiing的博客 2790

QGraphicsScene类的常用函数

QGraphicsScene类的常用函数; scene = new QGraphicsScene; scene->addEllipse(40*x, 40*y, 35,35, QPen(Qt::NoPen),QBrush(Qt::black)); 画椭圆(包括圆),40*x, 40*y,是圆心的坐标,35,35为椭圆两个半轴的半径 scene->addLine(-300,...

心向暖的博客 3333

【Claude Code的Harness Engineering实现】:06-记忆系统(Memory)

记忆系统是Claude Code实现跨会话持久化和上下文保持的核心组件。它分为短期记忆(当前会话的对话历史)和长期记忆(跨会话保留的结构化信息),通过多层级的文件系统实现灵活的记忆管理。

rengang66的博客 240

QGraphicsScene类详解

是 Qt 的图形视图框架中的核心类,用于管理和组织二维图形元素。提供了一个容器,存储和管理对象,并处理它们的布局、层次、交互和事件。相比于直接使用QWidget支持复杂的二维图形场景。提供平移、缩放和旋转等图形变换。高效管理大量图形元素。是 Qt 中强大的二维图形管理工具,适用于需要复杂图形布局和交互的应用场景。在实际开发中,配合和,可以轻松实现各种精美的图形界面。如果需要扩展功能,可以通过继承创建自定义图形项,从而实现更复杂的场景需求。

抟土成人祖,炼石补青天。眼中览银河,手可摘星辰。 1200

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Qt QGraphicsView、QGraphicsScene类详解-图形化视图框架

Qt图形视图框架由QGraphicsView、QGraphicsScene和QGraphicsItem三大核心组件构成,提供强大的2D图形管理能力。QGraphicsView负责可视化场景内容,支持平移、缩放、旋转等变换操作,处理用户交互事件。QGraphicsScene作为容器管理图形项,处理事件分发和碰撞检测。两者协同工作可实现流程图编辑器、CAD应用、数据可视化等复杂图形界面。

本博客分享软硬件一体化开发实战。硬件涵盖 PCB 设计、STM32 等 MCU 底层开发;软件包含 C++、Rust,Qt/QML、PyQt、Slint、TouchGFX、LVGL 各类 GUI 框架。方便软硬件开发者查阅学习。欢迎关注! 612

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: QPainter【详细描述】
下一篇: QGraphicsScene【详细描述】
floatbit
博客等级 码龄24年 460粉丝 47原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值