朔州市网站建设_网站建设公司_虚拟主机_seo优化
2026/1/3 10:19:37 网站建设 项目流程

在 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场景。

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询