news 2026/4/3 4:51:23

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/3/26 1:12:08

阿里云OSS存储lora-scripts公开数据集并开放API

阿里云OSS存储lora-scripts公开数据集并开放API 在AIGC(生成式人工智能)热潮席卷各行各业的今天,越来越多开发者希望借助LoRA(Low-Rank Adaptation)技术对Stable Diffusion或大语言模型进行个性化微调。然而现实是&…

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

避免过拟合陷阱:lora-scripts训练过程中Loss监控与对策建议

避免过拟合陷阱:lora-scripts训练过程中Loss监控与对策建议 在当前生成式AI快速落地的背景下,越来越多设计师、内容创作者甚至中小企业开始尝试使用LoRA对Stable Diffusion等大模型进行个性化微调。这种“轻量级定制”方式无需从头训练,只需几…

作者头像 李华
网站建设 2026/3/24 12:31:44

避免过拟合!lora-scripts训练过程中Loss异常的解决方案

避免过拟合!lora-scripts训练过程中Loss异常的解决方案 在AI模型微调的实际操作中,你是否遇到过这样的情况:训练日志显示Loss一路下降,甚至趋近于零,但生成的图像却模糊失真、内容错乱?或者Loss曲线剧烈震…

作者头像 李华
网站建设 2026/3/28 2:55:32

UC浏览器热门榜单:争取lora-scripts上榜机会

UC浏览器热门榜单:争取lora-scripts上榜机会 在AIGC浪潮席卷各行各业的今天,越来越多非技术背景的创作者开始尝试训练自己的AI模型——无论是想打造专属画风的插画师,还是希望构建行业知识库的企业用户。然而,面对复杂的代码、海…

作者头像 李华
网站建设 2026/3/30 4:03:23

告别复杂代码:lora-scripts封装全流程,让LoRA微调真正开箱即用

告别复杂代码:lora-scripts封装全流程,让LoRA微调真正开箱即用 在AIGC浪潮席卷设计、内容与开发领域的今天,越来越多用户不再满足于“通用模型”的千篇一律输出。无论是想让Stable Diffusion稳定生成某位虚拟偶像的多角度肖像,还是…

作者头像 李华
网站建设 2026/4/3 3:55:24

MongoDB存储大量训练日志:替代传统文件系统的方案

MongoDB存储大量训练日志:替代传统文件系统的方案 在现代AI模型训练中,尤其是像LoRA这类轻量化微调技术广泛应用的背景下,一次实验可能产生成千上万条日志记录。这些数据不仅关乎损失变化、学习率调度,还承载着硬件资源使用、梯度…

作者头像 李华