news 2026/1/20 4:17:33

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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场景。

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

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

Telegram群组建立:提供即时技术支持与交流空间

Telegram群组建立:提供即时技术支持与交流空间 在生成式AI迅速普及的今天,越来越多开发者和创作者希望快速定制属于自己的模型——无论是训练一个具有独特艺术风格的Stable Diffusion画风LoRA,还是微调一个懂行业术语的对话机器人。然而&…

作者头像 李华
网站建设 2026/1/18 18:21:55

医疗、法律行业大模型如何垂直适配?lora-scripts助力LLM话术定制

医疗、法律行业大模型如何垂直适配?LoRA-scripts助力LLM话术定制 在医院的智能导诊系统中,如果患者问“我最近头晕心悸,是不是高血压?”而模型回答“建议多喝热水”,这不仅荒诞,更可能带来风险。同样&#…

作者头像 李华
网站建设 2026/1/18 20:32:30

STM32中CANFD和CAN的区别:一文说清通信机制差异

STM32中的CAN与CAN FD:从通信机制到实战设计的深度解析 你有没有遇到过这样的场景?系统里多个传感器疯狂上报数据,CPU中断快被CAN总线“淹死”了;OTA升级时,等固件传完一杯咖啡都凉透了;或者新设备想高速传…

作者头像 李华
网站建设 2026/1/17 20:23:58

(Spring Native 启动加速秘籍)从代码编写到构建参数的12项最佳实践

第一章:Spring Native 启动速度的革命性意义在现代云原生应用开发中,启动速度直接影响服务的弹性伸缩、部署效率与资源利用率。传统基于 JVM 的 Spring Boot 应用虽然功能强大,但冷启动时间较长,尤其在 Serverless 或微服务架构中…

作者头像 李华
网站建设 2026/1/17 15:06:55

为什么顶级金融机构都在升级Java抗量子加密?真相曝光

第一章:为什么顶级金融机构纷纷布局Java抗量子加密随着量子计算的快速发展,传统公钥加密体系(如RSA、ECC)面临被高效破解的风险。金融行业作为数据安全要求最高的领域之一,必须提前应对“量子威胁”。Java作为企业级系…

作者头像 李华