news 2026/6/9 23:54:06

qt c++ 的高级绘图框架都有什么类,类的关系都是什么

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
qt c++ 的高级绘图框架都有什么类,类的关系都是什么

在 Qt C++ 中,高级绘图功能主要由Qt Graphics View Framework(图形视图框架)和Qt Paint System(绘图系统)共同支撑。它们提供了从底层像素绘制到高层场景管理的一整套机制。

下面分别介绍这两个体系中的核心类及其关系:


一、Qt Paint System(基础绘图系统)

用于直接在窗口、控件或图像上进行 2D 绘图。

核心类

类名作用
QPainter执行实际绘图操作的类,提供 drawLine、drawRect、drawText 等方法
QPaintDevice抽象基类,表示可以被 QPainter 绘制的目标设备
QWidget继承自 QPaintDevice,是最常用的绘图目标(重写 paintEvent)
QPixmap/QImage/QPicture都继承自 QPaintDevice,分别用于屏幕优化位图、可直接访问像素的图像、可记录/回放的绘图指令

类关系简图

QPaintDevice ↑ ├── QWidget ├── QPixmap ├── QImage └── QPicture QPainter ——(uses)——→ QPaintDevice

注意:QPainter必须在QPaintDevicepaintEvent()(对 QWidget)或显式 begin/end 范围内使用。


二、Qt Graphics View Framework(高级图形视图框架)

适用于需要管理大量 2D 图形项、支持缩放/平移/交互的复杂场景(如流程图、CAD、游戏地图等)。

三大核心组件(MVC 架构思想)

组件作用
Model(数据)QGraphicsScene存储和管理所有图形项(QGraphicsItem及其子类)
View(视图)QGraphicsView提供可视化窗口,支持滚动、缩放、拖拽等交互
Item(元素)QGraphicsItem场景中的基本图形单元(如矩形、文本、自定义图形)

核心类详解

1.QGraphicsItem(抽象基类)
  • 所有图形项的基类。
  • 子类包括:
    • QGraphicsRectItem
    • QGraphicsEllipseItem
    • QGraphicsTextItem
    • QGraphicsPixmapItem
    • QGraphicsPathItem
    • QGraphicsLineItem
    • QGraphicsPolygonItem
    • 以及可自定义的派生类(需重写paint()boundingRect()
2.QGraphicsScene
  • 管理大量QGraphicsItem
  • 支持碰撞检测、选中、焦点、事件传播等。
  • 不直接显示,需通过QGraphicsView显示。
3.QGraphicsView
  • 继承自QScrollArea,提供滚动区域。
  • 可设置变换(如缩放scale()、旋转rotate())。
  • 可自定义渲染(如抗锯齿、OpenGL 后端)。

类关系简图

QGraphicsItem ←─── QGraphicsRectItem, QGraphicsTextItem, ... ↑ │ (owned by) QGraphicsScene ←───(displayed in)─── QGraphicsView ↑ │ (inherits) QObject

注意:QGraphicsView本身是一个 widget,内部使用QPainter渲染QGraphicsScene的内容。


三、其他高级绘图相关类

说明
QTransform表示 2D 仿射变换(平移、旋转、缩放、剪切)
QPen/QBrush控制线条样式和填充样式,用于QPainterQGraphicsItem
QPainterPath描述复杂路径,可用于裁剪、填充或作为QGraphicsPathItem
QStyleOptionGraphicsItem在自定义QGraphicsItem::paint()时传递样式信息

四、典型使用流程对比

基础绘图(QWidget + QPainter)

void MyWidget::paintEvent(QPaintEvent *) { QPainter painter(this); painter.drawRect(10, 10, 100, 50); }

高级绘图(Graphics View)

QGraphicsScene *scene = new QGraphicsScene; QGraphicsView *view = new QGraphicsView(scene); QGraphicsRectItem *rect = scene->addRect(10, 10, 100, 50); rect->setFlag(QGraphicsItem::ItemIsMovable); // 可拖动 view->show();

总结

特性Paint SystemGraphics View Framework
适用场景简单、静态绘图(如自定义控件)复杂、动态、交互式图形(如编辑器、游戏)
性能轻量,但管理大量对象效率低高效(使用 BSP 树优化渲染与查找)
交互需手动处理事件内置选中、拖拽、碰撞检测
缩放/平移需手动实现内置支持(QGraphicsView::scale()

如果你有具体应用场景(比如做矢量绘图软件、流程图编辑器、2D 游戏等),我可以进一步推荐合适的类组合和设计模式。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 19:41:04

WorkshopDL终极指南:跨平台Steam创意工坊模组下载全攻略

WorkshopDL终极指南:跨平台Steam创意工坊模组下载全攻略 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为Epic、GOG等平台无法享受Steam创意工坊的精彩模组而烦…

作者头像 李华
网站建设 2026/6/9 23:35:44

DeTikZify智能绘图革命:从草图到专业图表的跨越式突破

DeTikZify智能绘图革命:从草图到专业图表的跨越式突破 【免费下载链接】DeTikZify Synthesizing Graphics Programs for Scientific Figures and Sketches with TikZ 项目地址: https://gitcode.com/gh_mirrors/de/DeTikZify 还在为科研绘图效率低下而烦恼&a…

作者头像 李华
网站建设 2026/6/9 18:38:14

城通网盘直链提取工具:无广告高速下载新体验

还在为城通网盘那令人困扰的广告等待和缓慢的下载速度而烦恼吗?现在,一款专门针对城通网盘直链提取的工具横空出世,让你在短短几秒钟内获取高速直连地址,彻底告别繁琐的操作流程和令人不快的限速问题。这款工具能够实现无广告下载…

作者头像 李华
网站建设 2026/6/9 19:45:05

终极openpilot自动驾驶指南:如何快速掌握300+车型的智能驾驶系统

终极openpilot自动驾驶指南:如何快速掌握300车型的智能驾驶系统 【免费下载链接】openpilot openpilot 是一个开源的驾驶辅助系统。openpilot 为 250 多种支持的汽车品牌和型号执行自动车道居中和自适应巡航控制功能。 项目地址: https://gitcode.com/GitHub_Tren…

作者头像 李华
网站建设 2026/6/9 19:52:29

社团管理|基于ssm + vue社团管理系统(源码+数据库+文档)

社团管理 目录 基于springboot vue个人记账系统 一、前言 二、系统功能演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于ssm vue社团管理系统 一、前言 博主介绍:✌️大厂码农|…

作者头像 李华