news 2026/4/9 19:29:50

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
qt c++ 二维绘图的类都有什么

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

在 Qt C++ 中,二维绘图主要通过Qt 的 2D 图形绘制系统(Qt Painting System)实现。该系统提供了一套丰富的类用于在窗口、图像或打印机等设备上进行 2D 绘图。以下是常用的与二维绘图相关的核心类:


🎨 核心绘图类

  1. QPainter

    • 作用:执行所有绘图操作的核心类。
    • 用法:通常在QWidget::paintEvent()QGraphicsItem::paint()或直接在QImage/QPixmap/QPrinter上创建QPainter对象进行绘制。
    • 可绘制内容:线条、矩形、椭圆、文本、图像、路径、渐变等。
  2. QPaintDevice

    • 作用:所有可以被QPainter绘制的目标设备的基类。
    • 常见子类
      • QWidget:在窗口部件上绘图。
      • QImage:在内存中的图像上绘图(支持像素级访问)。
      • QPixmap:在屏幕优化的图像上绘图(适合显示,不适合像素操作)。
      • QPicture:记录并重放绘图命令。
      • QPrinter:向打印机输出。
  3. QPaintEngine

    • 作用:抽象底层图形 API(如 OpenGL、Direct2D、Raster 等),一般用户无需直接使用。

🖌️ 辅助绘图类(用于设置样式、形状等)

  1. QPen

    • 定义线条的颜色、宽度、线型(实线、虚线等)、端点样式、连接样式等。
  2. QBrush

    • 定义填充样式,如纯色、渐变(QGradient)、纹理(QPixmap)等。
  3. QColor

    • 表示颜色,支持 RGB、HSV、CMYK 等多种格式。
  4. QFont

    • 控制文本的字体、大小、粗细等。
  5. QTransform / QMatrix

    • 提供坐标变换功能(平移、旋转、缩放、仿射变换等)。
  6. QRect / QRectF / QPoint / QPointF / QSize / QSizeF

    • 基础几何类型,用于表示位置、尺寸、区域等(带 F 后缀的是浮点版本)。
  7. QPolygon / QPolygonF

    • 表示点序列构成的多边形。
  8. QRegion

    • 表示一个区域(常用于裁剪或不规则窗口)。
  9. QPainterPath

    • 描述复杂路径(如贝塞尔曲线、组合形状),可重复使用或进行布尔运算。
  10. QGradient(及其子类)

    • 渐变填充基类,包括:
      • QLinearGradient
      • QRadialGradient
      • QConicalGradient

🖼️ 高级绘图框架(可选)

  1. QGraphicsView 框架(基于场景的 2D 绘图)
    • QGraphicsScene:管理大量 2D 图元。
    • QGraphicsView:视口,用于查看场景。
    • QGraphicsItem:场景中的基本图元(如QGraphicsRectItem,QGraphicsEllipseItem, 自定义 item 等)。
    • 适合复杂交互式 2D 图形应用(如流程图、地图、游戏等)。

✅ 典型使用模式

void MyWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); // 在 QWidget 上绘图 painter.setPen(Qt::red); painter.setBrush(Qt::blue); painter.drawRect(10, 10, 100, 50); }

或在QImage上绘图:

QImage image(200, 200, QImage::Format_ARGB32); image.fill(Qt::white); QPainter painter(&image); painter.drawLine(...);

总结

功能
绘图执行QPainter
绘图目标QWidget,QImage,QPixmap,QPrinter
样式控制QPen,QBrush,QColor,QFont
几何与路径QRect,QPoint,QPainterPath,QPolygon
变换QTransform
渐变QLinearGradient
场景系统QGraphicsView/QGraphicsScene

如果你有具体应用场景(比如画图表、做图像处理、做 UI 自定义控件等),我可以给出更针对性的建议。

2.QPainter 详解

QPainter是 Qt 框架中用于 2D 图形绘制的核心类,广泛应用于自定义控件、图表、图像处理等场景。它提供了丰富的 API,支持在各种设备(如窗口、图像、打印机等)上进行高质量的绘图操作。


一、基本概念

1. 绘图设备(Paint Device)

QPainter只能在一个绘图设备上进行绘制,常见的绘图设备包括:

  • QWidget:在窗口或控件上绘制。
  • QImage:在内存图像上绘制,可用于图像生成或处理。
  • QPixmap:与屏幕相关的像素图,适合显示。
  • QPicture:记录绘图命令,可重放。
  • QPrinter:用于打印输出。

2. 绘图状态(Paint State)

QPainter内部维护一个状态栈,包括:

  • 画笔(QPen):线条颜色、宽度、样式等。
  • 画刷(QBrush):填充颜色、图案等。
  • 字体(QFont):文本字体。
  • 变换矩阵(Transform):平移、旋转、缩放等。
  • 裁剪区域(Clipping):限制绘制区域。

可通过save()restore()保存/恢复状态。


二、基本使用流程

void MyWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); // 在 this (QWidget) 上绘图 // 设置画笔和画刷 painter.setPen(Qt::red); painter.setBrush(Qt::blue); // 绘制图形 painter.drawRect(10, 10, 100, 50); painter.drawEllipse(120, 10, 80, 80); // 绘制文本 painter.setFont(QFont("Arial", 12)); painter.drawText(10, 100, "Hello QPainter!"); // 自动析构时结束绘制 }

⚠️ 注意:通常只在paintEvent()中创建QPainter,否则可能导致异常或闪烁。


三、常用绘图方法

方法功能
drawLine()画线
drawRect()/drawRoundedRect()矩形 / 圆角矩形
drawEllipse()椭圆或圆
drawPolygon()/drawPolyline()多边形 / 折线
drawPath()使用QPainterPath绘制复杂路径
drawText()绘制文本
drawPixmap()/drawImage()绘制图像
fillRect()填充矩形(不使用当前画笔)

四、设置绘图属性

1. 画笔(QPen)

控制线条外观:

QPen pen; pen.setColor(Qt::green); pen.setWidth(3); pen.setStyle(Qt::DashLine); painter.setPen(pen);

2. 画刷(QBrush)

控制填充样式:

QBrush brush(Qt::yellow, Qt::BDiagPattern); painter.setBrush(brush);

3. 字体(QFont)

painter.setFont(QFont("微软雅黑", 14, QFont::Bold));

五、坐标系统与变换

QPainter支持仿射变换:

painter.translate(100, 100); // 平移 painter.rotate(45); // 旋转(角度) painter.scale(1.5, 1.5); // 缩放 painter.shear(0.2, 0); // 剪切

变换是累积的,建议配合save()/restore()使用。


六、抗锯齿(Antialiasing)

提升绘制质量:

painter.setRenderHint(QPainter::Antialiasing, true);

其他常用渲染提示:

  • QPainter::TextAntialiasing
  • QPainter::SmoothPixmapTransform

七、离屏绘制(Off-screen Rendering)

QImageQPixmap上绘制,再显示到界面:

QImage image(200, 200, QImage::Format_ARGB32); image.fill(Qt::transparent); QPainter painter(&image); painter.setRenderHint(QPainter::Antialiasing); painter.setBrush(Qt::red); painter.drawEllipse(10, 10, 180, 180); painter.end(); // 显示到 QLabel label->setPixmap(QPixmap::fromImage(image));

八、性能建议

  • 避免在paintEvent外频繁创建QPainter
  • 尽量减少重绘区域(使用update(rect)而非repaint())。
  • 对于复杂图形,考虑缓存为QPixmap(双缓冲)。
  • 合理使用QPainterPath预编译路径。

九、完整示例:自定义圆形按钮

class CircleButton : public QWidget { protected: void paintEvent(QPaintEvent *) override { QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); QColor color = underMouse() ? Qt::darkCyan : Qt::cyan; painter.setBrush(color); painter.setPen(Qt::black); painter.drawEllipse(rect()); painter.drawText(rect(), Qt::AlignCenter, "Click"); } void enterEvent(QEvent *) override { update(); } void leaveEvent(QEvent *) override { update(); } };

十、参考资料

  • Qt 官方文档 - QPainter
  • 《C++ GUI Programming with Qt 6》
  • Qt 示例项目:widgets/painting/

如需了解特定功能(如渐变、路径、合成模式等),可继续提问!

3.QPainter 构成

QPainter是 Qt 框架中用于 2D 图形绘制的核心类,它提供了丰富的 API 来在各种设备(如窗口、图像、打印机等)上绘制图形、文本和图像。理解QPainter的构成可以从以下几个方面入手:


1.基本组成要素

QPainter的绘制操作主要依赖于以下三个核心组成部分:

(1)绘制设备(Paint Device)
  • QPainter必须作用于一个绘图设备上。
  • 常见的绘图设备包括:
    • QWidget(用于在窗口或控件上绘图)
    • QImage(用于离屏绘制,可保存为图片)
    • QPixmap(用于屏幕相关的像素图绘制)
    • QPicture(用于记录和重放绘图命令)
    • QPrinter(用于打印输出)

使用方式:QPainter painter(&device);

(2)画笔(QPen)
  • 控制线条的外观:颜色、宽度、线型(实线、虚线等)、端点样式、连接样式等。
  • 示例:
    QPen pen(Qt::red, 2, Qt::DashLine); painter.setPen(pen);
(3)画刷(QBrush)
  • 控制填充区域的外观:颜色、图案(纯色、渐变、纹理等)。
  • 示例:
    QBrush brush(Qt::blue, Qt::BDiagPattern); painter.setBrush(brush);

注意:如果未设置画刷(或使用Qt::NoBrush),则图形内部不会被填充。


2.坐标系统与变换

  • QPainter支持坐标变换(平移、旋转、缩放、剪切):
    painter.translate(100, 100); painter.rotate(45); painter.scale(1.5, 1.5);
  • 使用save()restore()可以保存和恢复当前的绘制状态(包括变换、pen、brush 等)。

3.绘制内容类型

QPainter支持绘制多种图形元素:

类型方法示例
基本图形drawLine(),drawRect(),drawEllipse(),drawPolygon()
路径drawPath(QPainterPath)
文本drawText()
图像drawPixmap(),drawImage()
复合图形通过QPainterPath构建复杂形状

4.绘制状态(State)

QPainter维护一个内部状态栈,包含:

  • 当前pen
  • 当前brush
  • font
  • backgroundMode
  • 坐标变换矩阵(world transform)
  • 裁剪区域(clipping region)

可通过save()/restore()进行状态管理。


5.典型使用流程

void MyWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); // this 是 QWidget 子类 painter.setPen(Qt::black); painter.setBrush(Qt::yellow); painter.drawRect(10, 10, 100, 100); }

注意:通常只在paintEvent()中创建QPainter并作用于this(即当前 widget)。


总结

QPainter的“构成”可以理解为:

  • 绘制目标(Paint Device)
  • 绘制工具(Pen + Brush + Font)
  • 绘制内容(图形、文本、图像)
  • 绘制上下文(坐标变换、裁剪、状态栈)

掌握这些要素,就能灵活使用QPainter实现各种 2D 图形界面效果。

如需更深入的内容(如抗锯齿、合成模式、性能优化等),也可以继续提问!

4.QPainter 常用接口

QPainter是 Qt 中用于 2D 图形绘制的核心类,常用于在窗口、图像(QImage)、打印机(QPrinter)等设备上进行绘图。以下是QPainter的一些常用接口和功能分类


一、基本使用流程

QPainter painter(this); // this 通常是 QWidget 指针 // 或者 QPainter painter(&image); // 绘制到 QImage 上 painter.setPen(...); painter.setBrush(...); painter.drawXXX(...); painter.end(); // 可选,析构时自动调用

二、设置绘图属性

1. 画笔(Pen)

控制线条颜色、宽度、样式等。

void setPen(const QPen &pen); void setPen(Qt::PenStyle style); void setPen(const QColor &color);

示例:

painter.setPen(QPen(Qt::red, 2, Qt::DashLine));

2. 画刷(Brush)

控制填充颜色和图案(用于封闭图形内部)。

void setBrush(const QBrush &brush); void setBrush(Qt::BrushStyle style);

示例:

painter.setBrush(QColor(0, 255, 0, 128)); // 半透明绿色

3. 字体(Font)

用于文本绘制。

void setFont(const QFont &font);

三、坐标变换

void translate(const QPointF &offset); // 平移 void rotate(qreal angle); // 旋转(角度,顺时针为正) void scale(qreal sx, qreal sy); // 缩放 void shear(qreal sh, qreal sv); // 剪切 void setTransform(const QTransform &transform, bool combine = false); // 设置仿射变换

注意:变换是累积的,可使用save()/restore()保存/恢复状态。


四、状态管理

void save(); // 保存当前状态(包括 pen/brush/transform 等) void restore(); // 恢复上次 save() 的状态

五、常用绘图函数

1. 基本几何图形

void drawPoint(const QPointF &p); void drawPoints(const QPointF *points, int pointCount); void drawLine(const QLineF &line); void drawLines(const QLineF *lines, int lineCount); void drawRect(const QRectF &rect); void drawRects(const QRectF *rects, int rectCount); void drawEllipse(const QRectF &rect); // 内接椭圆 void drawEllipse(const QPointF &center, qreal rx, qreal ry); void drawPolygon(const QPointF *points, int pointCount, Qt::FillRule fillRule = Qt::OddEvenFill); void drawConvexPolygon(const QPointF *points, int pointCount); void drawRoundedRect(const QRectF &rect, qreal xRadius, qreal yRadius);

2. 路径(复杂图形)

void drawPath(const QPainterPath &path);

配合QPainterPath可绘制贝塞尔曲线、组合图形等。

3. 文本

void drawText(const QPointF &position, const QString &text); void drawText(const QRectF &rect, int flags, const QString &text); // 支持对齐

4. 图像

void drawPixmap(const QRectF &targetRect, const QPixmap &pixmap, const QRectF &sourceRect); void drawPixmap(const QPointF &point, const QPixmap &pixmap); void drawImage(const QRectF &targetRect, const QImage &image, const QRectF &sourceRect);

六、其他实用方法

bool isActive() const; // 是否处于活动状态(已 begin) QPaintDevice* device() const; // 获取当前绘制设备 QRectF viewport() const; // 视口(设备坐标) QRectF window() const; // 窗口(逻辑坐标) void setRenderHint(RenderHint hint, bool on = true); // 如抗锯齿

常用渲染提示(RenderHint):

  • QPainter::Antialiasing:启用反锯齿(平滑边缘)
  • QPainter::TextAntialiasing:文本抗锯齿
  • QPainter::SmoothPixmapTransform:缩放图片时平滑处理

示例:

painter.setRenderHint(QPainter::Antialiasing, true);

七、注意事项

  • 只能在 paintEvent() 中或显式创建 QPainter 对象时绘图(如绘制到 QImage)。
  • 不要在构造函数或定时器中直接使用QPainter绘制到 widget,应调用update()触发重绘。
  • 多次调用begin()/end()需配对(通常构造/析构自动处理)。

如果你有具体应用场景(比如画曲线、自定义控件、导出图片等),我可以提供更针对性的示例代码。

5.QPaintDevice详解

QPaintDevice是 Qt 图形系统中的一个核心抽象基类,用于表示可以被 QPainter 绘制的设备。所有支持绘图操作的 Qt 类(如 QWidget、QImage、QPixmap、QPicture、QOpenGLWidget 等)都继承自QPaintDevice。理解QPaintDevice对于掌握 Qt 的 2D 绘图机制至关重要。


一、基本概念

1. 定义

QPaintDevice是一个抽象类,不能直接实例化。它定义了绘图设备的基本接口,使得QPainter可以在其上进行绘制操作。

2. 核心作用

  • 提供统一的绘图接口。
  • 将绘图操作与底层设备(屏幕、内存图像、打印机等)解耦。
  • 支持跨平台一致的绘图行为。

二、主要子类

子类说明
QWidget在窗口部件上绘图(通常在paintEvent()中使用)。
QImage在内存中的图像上绘图,支持像素级访问,可用于离屏渲染。
QPixmap在屏幕优化的像素图上绘图,适合显示但不支持直接像素读写。
QPicture记录绘图命令,可重放(序列化绘图操作)。
QPrinter向打印机输出(通过 QPrinter,本质是 QPaintDevice 的子类)。
QOpenGLPaintDevice允许使用 QPainter 在 OpenGL 上下文中绘图(Qt5/6 中部分支持)。

注意:QSvgGenerator在 Qt5 中也继承自QPaintDevice,用于生成 SVG 文件(Qt6 中可能移除或重构)。


三、关键接口

1. 虚函数(由子类实现)

virtual int devType() const; virtual QPaintEngine *paintEngine() const = 0;
  • paintEngine():返回与该设备关联的QPaintEngine对象,负责实际的底层绘图指令执行。
  • devType():返回设备类型(如QInternal::WidgetQInternal::Image等),主要用于内部识别。

2. 公共方法

int width() const; // 设备逻辑宽度(单位:像素) int height() const; // 设备逻辑高度 int widthMM() const; // 物理宽度(毫米) int heightMM() const; // 物理高度(毫米) int logicalDpiX() const; // 水平逻辑 DPI int logicalDpiY() const; // 垂直逻辑 DPI qreal devicePixelRatio() const; // 设备像素比(用于高 DPI 屏幕)

这些方法帮助QPainter正确缩放和布局内容。


四、使用示例

示例 1:在 QImage 上绘图(离屏渲染)

QImage image(200, 200, QImage::Format_ARGB32); image.fill(Qt::white); QPainter painter(&image); painter.setPen(Qt::red); painter.drawRect(10, 10, 100, 100); painter.end(); // 保存或显示 image image.save("output.png");

示例 2:在 QWidget 中绘图(响应 paintEvent)

void MyWidget::paintEvent(QPaintEvent *event) { QPainter painter(this); // this 是 QWidget,继承自 QPaintDevice painter.drawLine(0, 0, width(), height()); }

五、注意事项

  1. 线程安全QPaintDevice及其子类通常不是线程安全的。绘图操作应在 GUI 线程中进行(除非明确支持,如某些 QImage 操作)。
  2. 生命周期:传递给QPainterQPaintDevice必须在其整个绘图期间保持有效。
  3. 设备类型限制
    • QImage支持所有 QPainter 功能。
    • QPixmap在某些平台上可能不支持高级功能(如浮点坐标抗锯齿)。
    • 打印机设备有分页限制。

六、与 QPaintEngine 的关系

  • QPaintDevice通过paintEngine()返回一个QPaintEngine实例。
  • QPaintEngine是真正的“绘图引擎”,负责将 QPainter 的调用转换为底层 API(如 GDI、Cocoa、X11、OpenGL、Vulkan 等)。
  • 开发者通常不需要直接操作QPaintEngine,除非要实现自定义绘图后端。

七、Qt6 中的变化

  • QPaintDevice接口基本保持稳定。
  • 部分子类(如QGLPixelBuffer)已被废弃。
  • 更强调基于 Vulkan/Metal 的现代图形后端,但QPainter+QPaintDevice仍广泛用于 2D UI。

总结

QPaintDevice是 Qt 2D 绘图体系的基石,它抽象了“在哪里画”的问题,让QPainter专注于“怎么画”。掌握其子类特性和使用场景,是高效使用 Qt 进行图形开发的关键。

如需进一步了解,可参考 Qt 官方文档:

  • QPaintDevice Class
  • Painting with Qt

是否需要具体某个子类(如 QImage vs QPixmap)的深入对比?

6.QPaintEngine详解

QPaintEngine是 Qt 绘图系统的核心组成部分之一,它定义了QPainter如何在不同的绘图设备上执行绘制操作。QPainter通过QPaintEngine抽象类与具体的绘图设备进行交互。下面是对QPaintEngine的详细解析:

1.基本概念

  • 抽象基类QPaintEngine是一个抽象基类,提供了统一的接口来支持多种绘图实现(如软件渲染、OpenGL、DirectX等)。
  • 派生类:Qt 提供了多个QPaintEngine的具体实现类,例如QPaintEngineRasterQPaintEngineOpenGL等,分别对应不同的渲染技术。

2.主要功能

QPaintEngine主要负责:

  • QPainter的绘制命令转换为针对特定设备的底层调用。
  • 处理坐标变换、剪切区域和抗锯齿等高级绘图特性。
  • 支持各种类型的图形绘制(线、矩形、路径等)以及文本绘制。

3.核心方法

QPaintEngine定义了一系列虚函数,这些函数对应于QPainter可能发出的各种绘制命令。以下是一些关键的方法:

  • begin(QPaintDevice *)end():开始和结束一次绘图会话。
  • drawPath(const QPainterPath &path):绘制一条路径。
  • drawTextItem(const QPointF &position, const QTextItem &textItem):绘制文本项。
  • updateState(const QPaintEngineState &state):当QPainter的状态改变时调用。

4.使用场景

虽然大多数情况下你不需要直接使用QPaintEngine,因为QPainter已经为你封装好了所有细节,但在某些特定情况下,了解QPaintEngine对于深入定制绘图过程是有帮助的,比如:

  • 实现自定义绘图设备。
  • 创建新的绘图引擎以支持新硬件或渲染技术。
  • 在特殊情况下优化绘图性能。

5.注意事项

  • 直接使用QPaintEngine需要对 Qt 的绘图系统有较深的理解,并且通常只在开发高级图形应用或需要高度定制化的情况下才考虑这样做。
  • 对于大多数应用程序而言,使用QPainter提供的高层API就足够了,无需直接操作QPaintEngine

总结

QPaintEngine是 Qt 绘图系统中不可或缺的一部分,它隐藏了不同绘图设备之间的差异,使得开发者可以通过一致的方式进行绘图操作。尽管直接使用QPaintEngine的机会不多,理解其工作原理有助于更好地掌握 Qt 的绘图机制,并在必要时实现更高效的图形处理解决方案。

7.QPixmap 详解

QPen是 Qt 框架中用于定义线条样式和颜色的类。它被广泛应用于绘图操作,如在QWidgetQImage或其他QPaintDevice子类上绘制直线、矩形、椭圆等形状时指定边框的颜色、宽度、线型(实线、虚线等)和其他属性。以下是关于QPen的详细讲解。

一、主要特性

  • 颜色:通过setColor()方法设置笔的颜色。
  • 宽度:使用setWidth()设置画笔的宽度。默认值为0,表示最细的可能线条(通常是一个像素宽)。
  • 线型:使用setStyle()方法设置线条类型,例如实线、虚线等。
  • 帽式样:使用setCapStyle()方法设置线条末端的样式,如平头、圆头或方形头。
  • 连接样式:使用setJoinStyle()方法设置两条线相交处的连接方式,如斜接连接、圆连接或斜角连接。
  • 自定义虚线模式:通过setDashPattern()方法可以创建自定义虚线模式。

二、构造函数

QPen提供了几种构造函数,允许以不同的方式初始化一个QPen对象:

QPen(); // 创建一个默认的黑色实线画笔 QPen(Qt::GlobalColor color); // 根据颜色创建画笔 QPen(const QColor &color); // 根据 QColor 对象创建画笔 QPen(Qt::PenStyle style); // 根据线条风格创建画笔 QPen(const QBrush &brush, qreal width, Qt::PenStyle style = Qt::SolidLine, Qt::PenCapStyle cap = Qt::SquareCap, Qt::PenJoinStyle join = Qt::BevelJoin); // 使用刷子、宽度、线条风格、帽式样以及连接样式来创建画笔

三、常用方法

  • 设置与获取颜色

    void setColor(const QColor &color); QColor color() const;
  • 设置与获取宽度

    void setWidth(int width); int width() const;
  • 设置与获取线条样式

    void setStyle(Qt::PenStyle style); Qt::PenStyle style() const;

    常见的线条样式包括:

    • Qt::SolidLine: 实线
    • Qt::DashLine: 虚线
    • Qt::DotLine: 点线
    • Qt::DashDotLine: 虚点线
    • Qt::DashDotDotLine: 虚双点线
    • Qt::CustomDashLine: 自定义虚线
  • 设置与获取线条两端的帽式样

    void setCapStyle(Qt::PenCapStyle style); Qt::PenCapStyle capStyle() const;

    帽式样有三种:

    • Qt::FlatCap: 平头
    • Qt::SquareCap: 方形头
    • Qt::RoundCap: 圆头
  • 设置与获取线条连接样式

    void setJoinStyle(Qt::PenJoinStyle style); Qt::PenJoinStyle joinStyle() const;

    连接样式包括:

    • Qt::MiterJoin: 斜接连接
    • Qt::BevelJoin: 斜角连接
    • Qt::RoundJoin: 圆连接
  • 设置与获取自定义虚线模式

    void setDashPattern(const QVector<qreal> &pattern); QVector<qreal> dashPattern() const;

    可以为Qt::CustomDashLine风格定义具体的虚线模式,其中pattern是一个浮点数数组,每个数字代表线段长度和间隔长度。

四、示例代码

下面是一段简单的代码示例,演示如何使用QPenQPainter中绘制不同样式的线条:

QPainter painter(this); QPen pen; // 设置颜色为红色,宽度为2像素 pen.setColor(Qt::red); pen.setWidth(2); // 设置线条样式为虚线 pen.setStyle(Qt::DashLine); // 应用到 QPainter painter.setPen(pen); // 绘制一条从(10,10)到(100,100)的直线 painter.drawLine(10, 10, 100, 100);

以上是对QPen类的基本介绍和使用说明。掌握QPen的用法对于实现复杂的图形界面设计至关重要。根据实际需要调整QPen的属性,可以使绘制的图形更加丰富多彩。

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

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

在 Qt C 中&#xff0c;用于二维图形绘图的核心类主要集中在 Qt GUI 模块&#xff08;特别是 QtWidgets 和 QtGui&#xff09;中。以下是常用的一些二维图形绘图相关类及其用途&#xff1a;1. QPainter核心绘图类&#xff0c;用于在各种设备&#xff08;如窗口、图像、打印机等…

作者头像 李华
网站建设 2026/4/9 5:07:58

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

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

作者头像 李华
网站建设 2026/4/9 7:53:10

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

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

作者头像 李华
网站建设 2026/4/9 1:02:40

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

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

作者头像 李华
网站建设 2026/3/27 16:16:46

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

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

作者头像 李华