news 2026/4/30 16:46:21

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/5/1 7:10:04

直播带货助手:AI主播用定制声音讲解商品

AI主播如何用定制声音讲好带货故事 在直播电商的战场上,每一秒都关乎转化率。主播情绪饱满地说出“限时抢购”,观众手指一滑完成下单——这背后不仅是营销策略的成功,更是声音感染力的胜利。然而,真人主播难以24小时在线&#xff…

作者头像 李华
网站建设 2026/5/1 7:20:34

中国行政区划GIS数据完整开发指南

在GIS数据应用领域,中国行政区划矢量数据为各类空间分析项目提供了基础地理框架。无论是宏观政策研究还是微观社区规划,这套包含国家、省级、地市级和区县级四个完整层级的ESRI Shapefile格式数据,都能为开发者和研究人员提供标准化的地理信息…

作者头像 李华
网站建设 2026/5/1 3:47:35

UnrealPakViewer:解锁虚幻引擎Pak文件内部结构的专业解决方案

UnrealPakViewer:解锁虚幻引擎Pak文件内部结构的专业解决方案 【免费下载链接】UnrealPakViewer 查看 UE4 Pak 文件的图形化工具,支持 UE4 pak/ucas 文件 项目地址: https://gitcode.com/gh_mirrors/un/UnrealPakViewer 你是否曾经面对虚幻引擎打…

作者头像 李华
网站建设 2026/5/1 6:07:34

ncmToMp3终极指南:轻松解锁网易云加密音乐的完整解决方案

ncmToMp3是一款基于纯C语言开发的强大工具,专门用于将网易云音乐的NCM加密文件转换为通用的MP3或FLAC格式。无论你是技术新手还是资深用户,都能通过本指南快速掌握转换技巧,让加密音乐重获自由。 【免费下载链接】ncmToMp3 网易云vip的ncm文件…

作者头像 李华
网站建设 2026/5/1 8:10:35

400 Bad Request错误排查:调用IndexTTS 2.0 API常见问题汇总

400 Bad Request错误排查:调用IndexTTS 2.0 API常见问题汇总 在短视频、虚拟主播和AIGC内容爆发的今天,高质量语音合成已不再是专业工作室的专属工具。B站开源的 IndexTTS 2.0 凭借其零样本音色克隆、毫秒级时长控制与情感解耦能力,迅速成为开…

作者头像 李华
网站建设 2026/4/26 5:34:22

Nintendo Switch NAND管理终极指南:完整备份与系统维护解决方案

Nintendo Switch NAND管理终极指南:完整备份与系统维护解决方案 【免费下载链接】NxNandManager Nintendo Switch NAND management tool : explore, backup, restore, mount, resize, create emunand, etc. (Windows) 项目地址: https://gitcode.com/gh_mirrors/n…

作者头像 李华