1.qt c++ 二维绘图的类都有什么
在 Qt C++ 中,二维绘图主要通过Qt 的 2D 图形绘制系统(Qt Painting System)实现。该系统提供了一套丰富的类用于在窗口、图像或打印机等设备上进行 2D 绘图。以下是常用的与二维绘图相关的核心类:
🎨 核心绘图类
QPainter
- 作用:执行所有绘图操作的核心类。
- 用法:通常在
QWidget::paintEvent()、QGraphicsItem::paint()或直接在QImage/QPixmap/QPrinter上创建QPainter对象进行绘制。 - 可绘制内容:线条、矩形、椭圆、文本、图像、路径、渐变等。
QPaintDevice
- 作用:所有可以被
QPainter绘制的目标设备的基类。 - 常见子类:
QWidget:在窗口部件上绘图。QImage:在内存中的图像上绘图(支持像素级访问)。QPixmap:在屏幕优化的图像上绘图(适合显示,不适合像素操作)。QPicture:记录并重放绘图命令。QPrinter:向打印机输出。
- 作用:所有可以被
QPaintEngine
- 作用:抽象底层图形 API(如 OpenGL、Direct2D、Raster 等),一般用户无需直接使用。
🖌️ 辅助绘图类(用于设置样式、形状等)
QPen
- 定义线条的颜色、宽度、线型(实线、虚线等)、端点样式、连接样式等。
QBrush
- 定义填充样式,如纯色、渐变(
QGradient)、纹理(QPixmap)等。
- 定义填充样式,如纯色、渐变(
QColor
- 表示颜色,支持 RGB、HSV、CMYK 等多种格式。
QFont
- 控制文本的字体、大小、粗细等。
QTransform / QMatrix
- 提供坐标变换功能(平移、旋转、缩放、仿射变换等)。
QRect / QRectF / QPoint / QPointF / QSize / QSizeF
- 基础几何类型,用于表示位置、尺寸、区域等(带 F 后缀的是浮点版本)。
QPolygon / QPolygonF
- 表示点序列构成的多边形。
QRegion
- 表示一个区域(常用于裁剪或不规则窗口)。
QPainterPath
- 描述复杂路径(如贝塞尔曲线、组合形状),可重复使用或进行布尔运算。
QGradient(及其子类)
- 渐变填充基类,包括:
QLinearGradientQRadialGradientQConicalGradient
- 渐变填充基类,包括:
🖼️ 高级绘图框架(可选)
- 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::TextAntialiasingQPainter::SmoothPixmapTransform
七、离屏绘制(Off-screen Rendering)
在QImage或QPixmap上绘制,再显示到界面:
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 fontbackgroundMode- 坐标变换矩阵(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 ¢er, 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::Widget、QInternal::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()); }五、注意事项
- 线程安全:
QPaintDevice及其子类通常不是线程安全的。绘图操作应在 GUI 线程中进行(除非明确支持,如某些 QImage 操作)。 - 生命周期:传递给
QPainter的QPaintDevice必须在其整个绘图期间保持有效。 - 设备类型限制:
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的具体实现类,例如QPaintEngineRaster和QPaintEngineOpenGL等,分别对应不同的渲染技术。
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 框架中用于定义线条样式和颜色的类。它被广泛应用于绘图操作,如在QWidget、QImage或其他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是一个浮点数数组,每个数字代表线段长度和间隔长度。
四、示例代码
下面是一段简单的代码示例,演示如何使用QPen在QPainter中绘制不同样式的线条:
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的属性,可以使绘制的图形更加丰富多彩。