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/5/31 16:09:14

QPainter 的成员构成

QPainter 是 Qt 框架中用于执行 2D 图形绘制的核心类,它本身不直接表示画布,而是作用于 QPaintDevice(如 QWidget、QImage、QPixmap 等)之上。其“成员构成”可以从两个维度理解:一、辅助绘图的成员对象(绘…

作者头像 李华
网站建设 2026/6/10 11:55:29

RAG的前世今生:AI Agent的记忆真相

最近看了一些关于RAG的论文以及一篇博客《关于从RAG到Agentic RAG再到Agent Memory的演进历程》。 博客地址:https://www.leoniemonigatti.com/blog/from-rag-to-agent-memory.html#agent-memory-read-write-via-tool-calls 一直都有听说RAG已死,于是有了…

作者头像 李华
网站建设 2026/6/10 7:49:31

魔兽争霸III完美兼容助手:轻松解决各类游戏运行难题

魔兽争霸III完美兼容助手:轻松解决各类游戏运行难题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为魔兽争霸III在新系统上的各种兼…

作者头像 李华
网站建设 2026/6/10 8:09:40

3个步骤实现Windows虚拟显示器:解锁无限工作空间的高效方案

3个步骤实现Windows虚拟显示器:解锁无限工作空间的高效方案 【免费下载链接】virtual-display-rs A Windows virtual display driver to add multiple virtual monitors to your PC! For Win10. Works with VR, obs, streaming software, etc 项目地址: https://g…

作者头像 李华
网站建设 2026/6/10 8:13:52

网盘直链解析技术架构深度解析:构建跨平台文件下载解决方案

网盘直链解析技术架构深度解析:构建跨平台文件下载解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 可以获取网盘文件真实下载地址。基于【网盘直链下载助手】修改(改自6.1.4版本) ,自用,去推广…

作者头像 李华
网站建设 2026/6/10 8:12:08

混合输入拼音修正特殊发音,确保准确无误

混合输入拼音修正特殊发音,确保准确无误 在中文语音合成的实际应用中,你是否曾遇到这样的尴尬:明明写的是“行长(hng zhǎng)说要涨工资”,系统却读成了“行(xng)长(chng…

作者头像 李华