news 2026/5/23 17:54:47

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/5/7 16:06:44

揭秘Java内置抗量子加密模块:你不知道的Bouncy Castle黑科技

第一章:Java抗量子加密技术概述随着量子计算的快速发展,传统公钥加密体系(如RSA、ECC)面临被高效破解的风险。抗量子加密(Post-Quantum Cryptography, PQC)旨在设计能够抵抗经典和量子计算机攻击的新型密码…

作者头像 李华
网站建设 2026/5/20 9:33:09

华为云对象存储OBS托管lora-scripts静态资源

华为云对象存储OBS托管lora-scripts静态资源 在AI模型定制日益普及的今天,LoRA(Low-Rank Adaptation)因其高效、低显存消耗的微调能力,已成为图像生成与大语言模型个性化训练的主流选择。但随之而来的问题是:如何管理分…

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

Naver韩国本地化部署:建立lora-scripts韩文社区

Naver韩国本地化部署:构建lora-scripts韩文社区 在生成式AI席卷全球的今天,个性化内容创作不再是大厂专属。从虚拟偶像到电商广告,从游戏场景设计到文化遗产数字化,越来越多的应用开始依赖定制化的AI模型来实现差异化竞争力。然而…

作者头像 李华
网站建设 2026/5/14 10:37:51

开源中国OSC频道报道:lora-scripts入选本周推荐项目

让模型微调像搭积木一样简单:lora-scripts 如何重塑 AIGC 个性化训练体验 在生成式 AI 爆发的今天,我们早已不再满足于“通用”的文生图或对话能力。设计师想要专属的艺术风格,电商团队希望打造品牌拟人化形象,客服系统需要行业术…

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

知乎专栏文章精选:深度剖析lora-scripts核心技术

lora-scripts核心技术深度解析 在生成式AI席卷创作领域的今天,一个普通人能否仅凭一张显卡和几百张图片,就训练出属于自己的专属风格模型?答案是肯定的——这正是lora-scripts这类工具正在实现的技术民主化图景。 Stable Diffusion、LLaMA等大…

作者头像 李华