当前位置: 首页 > news >正文

qt c++ 二维图形绘图的类都有什么

在 Qt C++ 中,用于二维图形绘图的核心类主要集中在Qt GUI 模块(特别是 QtWidgets 和 QtGui)中。以下是常用的一些二维图形绘图相关类及其用途:


1.QPainter

  • 核心绘图类,用于在各种设备(如窗口、图像、打印机等)上绘制 2D 图形。
  • 支持绘制:
    • 基本图形(线、矩形、椭圆、多边形等)
    • 文本
    • 图像(QImage、QPixmap)
    • 路径(QPainterPath)
  • 使用方式通常是在QWidget::paintEvent()中创建QPainter对象进行绘制。
void MyWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); painter.drawRect(10, 10, 100, 50); }

2.QPaintDevice

  • 抽象基类,表示可以被QPainter绘制的目标设备。
  • 常见子类包括:
    • QWidget:窗口部件
    • QImage:内存中的图像(支持像素级操作)
    • QPixmap:屏幕优化的图像(适合显示)
    • QPicture:记录并重放绘图命令
    • QPrinter:用于打印输出

3.QPen

  • 定义线条的颜色、宽度、样式(实线、虚线等)、端点样式、连接样式等。
  • 用于设置QPainter的描边属性。
QPen pen(Qt::red, 3, Qt::DashLine); painter.setPen(pen);

4.QBrush

  • 定义填充样式,如颜色、渐变(QGradient)、纹理(QPixmap)等。
  • 用于填充形状内部。
QBrush brush(Qt::blue, Qt::BDiagPattern); painter.setBrush(brush);

5.QColor

  • 表示颜色(RGB、HSV、CMYK 等格式)。
  • 可用于QPenQBrushQPalette等。

6.QFont

  • 定义文本字体、大小、粗细等。
  • 通过QPainter::setFont()设置。

7.QTransform / QMatrix

  • 表示 2D 仿射变换(平移、旋转、缩放、剪切等)。
  • 可通过QPainter::setTransform()应用变换。

8.QPainterPath

  • 表示复杂的矢量路径(可包含直线、曲线、子路径等)。
  • 支持布尔运算(如合并、相交)。
  • 可用QPainter::drawPath()绘制。
QPainterPath path; path.addRect(10, 10, 100, 50); path.addEllipse(50, 50, 80, 80); painter.drawPath(path);

9.QRegion

  • 表示一个区域(由矩形、多边形等组成),常用于裁剪或命中测试。
  • 可与QPainter::setClipRegion()配合使用。

10.QImage / QPixmap / QBitmap

  • 虽然主要是图像类,但也常作为绘图目标或源:
    • QImage:支持直接像素访问,适合图像处理。
    • QPixmap:针对屏幕显示优化,适合 GUI 显示。
    • QBitmap:单色 QPixmap。

11.QGradient(抽象类)及其子类

  • 用于创建渐变画刷:
    • QLinearGradient
    • QRadialGradient
    • QConicalGradient
QLinearGradient gradient(0, 0, 100, 100); gradient.setColorAt(0, Qt::white); gradient.setColorAt(1, Qt::black); QBrush brush(gradient); painter.setBrush(brush);

12.QStyle / QStyleOption

  • 虽不直接用于自定义绘图,但可用于绘制符合当前系统风格的标准控件元素(如按钮、滚动条等)。

总结:典型绘图流程

void MyWidget::paintEvent(QPaintEvent *) { QPainter painter(this); painter.setPen(QPen(Qt::red, 2)); painter.setBrush(QBrush(Qt::yellow)); painter.drawRect(10, 10, 100, 50); }

如果你使用的是Qt Quick(QML),则绘图模型完全不同(基于 Scene Graph),但你问的是 C++,所以上述内容适用于Qt Widgets自定义 QWidget/QGraphicsView场景。

需要更具体的例子(如绘制曲线、动画、坐标系变换等)也可以告诉我!

http://www.jsqmd.com/news/186399/

相关文章:

  • 使用git commit管理lora-scripts项目版本,保障训练可复现
  • 【物联网开发者必看】:Quarkus 2.0带来哪些颠覆性变化与适配新策略
  • 如何让 Spring Native 应用秒级响应?揭秘云原生场景下的极速启动方案
  • 百考通AI:一键生成专业文献综述,告别“文献荒”,让你的学术研究赢在起跑线!
  • 为什么越来越多的IoT项目选择Quarkus 2.0?深入解析其原生镜像优势与实时响应能力
  • 如何实现虚拟线程异常的统一日志追踪?架构师不会告诉你的2种方案
  • GPG签名验证lora-scripts发布版本:保障软件来源可信
  • 百考通AI:你的智能开题报告生成专家,从零到一,一键搞定学术第一步!
  • 掌握这3种超时设置模式,让你的Java并发程序健壮性提升10倍
  • UC浏览器热门榜单:争取lora-scripts上榜机会
  • 为什么你的异步任务无法准时中断?Java结构化并发超时失效的4个根本原因
  • IAR日志输出配置:跟踪运行状态的方法
  • 【Spring Native 性能革命】:从启动耗时5秒到200ms的完整优化路径曝光
  • nrf52832的mdk下载程序入门必看:手把手教程
  • 知乎专栏文章精选:深度剖析lora-scripts核心技术
  • huggingface镜像网站推荐:加速大模型权重下载
  • 基于STM32H7的FreeModbus高性能部署方案
  • 使用lora-scripts进行短视频素材生成:创意产业新机遇
  • 【性能革命】:JDK 23向量API集成带来的5大突破性优势
  • 如何将STM32传感器数据显示在VOFA+:快速理解
  • InfoQ技术资讯专题:专访lora-scripts核心开发团队
  • 如何验证下载的lora-scripts代码完整性?SHA256校验方法
  • Obsidian笔记系统接入lora-scripts生成结果展示
  • 【JavaAI开发效率革命】:飞算核心配置生成技术,让编码速度提升10倍
  • Jupyter Notebook调试lora-scripts训练脚本的操作方法
  • 导师推荐!8款AI论文工具测评:继续教育写作全攻略
  • CI/CD流水线集成lora-scripts:自动化测试与部署
  • 小白也能上手!使用lora-scripts在本地训练专属AI绘画风格LoRA
  • 【机器学习】限制性玻尔兹曼机(RBM)
  • Mac M1芯片能否运行lora-scripts?ARM架构兼容性分析