news 2026/5/23 14:48:34

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/19 9:47:39

旧Mac升级指南:3步解锁最新macOS全功能

旧Mac升级指南:3步解锁最新macOS全功能 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为2017年之前的Mac设备无法获得官方系统更新而烦恼吗?当…

作者头像 李华
网站建设 2026/5/21 10:49:07

AI语音合成进入精准时代:自回归模型实现token级时长调控

AI语音合成进入精准时代:自回归模型实现token级时长调控 在影视剪辑、虚拟主播直播或动画配音的幕后,一个常被忽视却至关重要的问题始终存在:如何让AI生成的语音与画面节奏严丝合缝地对齐? 传统TTS系统或许能“说得像人”&#xf…

作者头像 李华
网站建设 2026/5/13 13:24:47

【零膨胀回归系数实战宝典】:基于R语言的高阶统计建模精要

第一章:零膨胀回归系数的核心概念与应用场景零膨胀回归是一种专门用于处理计数数据中过多零值问题的统计建模方法。在许多实际场景中,如保险理赔次数、疾病发病频率或客户购买行为,观测到的零值数量远超传统泊松或负二项分布所能解释的范围。…

作者头像 李华
网站建设 2026/5/21 12:06:36

Listen1音乐聚合播放器技术解析与使用指南

Listen1音乐聚合播放器技术解析与使用指南 【免费下载链接】listen1_chrome_extension one for all free music in china (chrome extension, also works for firefox) 项目地址: https://gitcode.com/gh_mirrors/li/listen1_chrome_extension 问题背景与解决方案 当前…

作者头像 李华
网站建设 2026/5/10 17:59:56

选择可控或自由时长模式,按需设置参数生成

IndexTTS 2.0 技术深度解析:如何实现毫秒级时长控制与音色情感解耦 在短视频、虚拟主播和有声内容爆发的今天,用户对语音合成的要求早已超越“能说话”的基本功能。他们需要的是音画精准同步、情绪自然流露、声音个性鲜明的真实感语音输出。然而&#xf…

作者头像 李华
网站建设 2026/5/21 11:52:33

mybatisplus分页查询语音任务列表的设计思路

MyBatisPlus 分页查询语音任务列表的设计思路 在当前 AIGC 技术迅猛发展的背景下,语音合成已不再是简单的“文字转语音”,而是朝着音色可控、情感丰富、时长精准的方向演进。B站开源的 IndexTTS 2.0 正是这一趋势下的代表性成果——它支持零样本音色克隆…

作者头像 李华