绘制线条drawLine
在Qt中,QPainter的drawLine()
函数用于绘制直线段,是绘图中最基础的操作之一。以下是关于drawLine()
的详细介绍:
1. 基本重载形式
1.1 drawLine(int x1, int y1, int x2, int y2)
- 功能:绘制从点
(x1, y1)
到点(x2, y2)
的直线。 - 参数:整数坐标点。
- 示例:
QPainter painter(this); painter.drawLine(10, 10, 100, 100); // 从(10,10)到(100,100)的对角线
1.2 drawLine(const QLine &line)
- 功能:通过QLine对象绘制直线。
- 参数:QLine对象(存储起点和终点)。
- 示例:
QLine line(10, 10, 100, 100); painter.drawLine(line);
1.3 drawLine(const QPoint &p1, const QPoint &p2)
- 功能:通过两个QPoint对象绘制直线。
- 参数:起点
p1
和终点p2
。 - 示例:
QPoint start(10, 10); QPoint end(100, 100); painter.drawLine(start, end);
2. 浮点精度重载
2.1 drawLine(float x1, float y1, float x2, float y2)
- 功能:使用浮点数坐标绘制直线(更高精度)。
- 示例:
painter.drawLine(10.5f, 10.5f, 100.5f, 100.5f);
2.2 drawLine(const QLineF &line)
- 功能:通过QLineF对象(浮点数坐标)绘制直线。
- 示例:
QLineF lineF(10.5, 10.5, 100.5, 100.5); painter.drawLine(lineF);
3. 线宽与样式设置
通过QPen可以自定义线的宽度、颜色、样式(实线、虚线等):
QPainter painter(this);
// 创建画笔并设置属性
QPen pen(Qt::blue); // 蓝色
pen.setWidth(2); // 线宽2像素
pen.setStyle(Qt::DashLine); // 虚线样式
painter.setPen(pen);
painter.drawLine(10, 10, 100, 100);
4. 绘制多条线
若需绘制多条不连续的线,可使用drawLines()
系列函数提高效率:
// 方法1:使用QLine数组
QLine lines[] = {
QLine(10, 10, 100, 10),
QLine(100, 10, 100, 100),
QLine(100, 100, 10, 100),
QLine(10, 100, 10, 10)
};
painter.drawLines(lines, 4); // 绘制4条线
// 方法2:使用QVector<QLine>
QVector<QLine> lineVector;
lineVector << QLine(10, 10, 100, 10) << QLine(100, 10, 100, 100);
painter.drawLines(lineVector);
5. 性能考虑
- 绘制大量线条时,优先使用
drawLines()
而非多次调用drawLine()
。 - 浮点坐标的绘制效率略低于整数坐标,但精度更高。
6. 应用场景
- 绘制图形边框、网格线。
- 实现折线图、坐标系等。
- 作为复杂图形的基础组件(如多边形由多条线段组成)。
总结
重载形式 | 适用场景 |
---|---|
drawLine(int, int, int, int) | 整数坐标的简单直线 |
drawLine(const QLine&) | 使用QLine对象 |
drawLine(float, float, float, float) | 高精度浮点数坐标 |
drawLine(const QLineF&) | 使用浮点型QLineF对象 |
drawLines() 系列 | 批量绘制多条直线 |
通过结合QPen的属性设置,drawLine()
可以满足各种线条绘制需求。
绘制矩形drawRect
在Qt中,QPainter的drawRect()
函数用于绘制矩形,是绘图中常用的基础操作。以下是关于drawRect()
的详细介绍:
1. 基本重载形式
1.1 drawRect(int x, int y, int width, int height)
- 功能:绘制一个左上角位于
(x, y)
,宽为width
,高为height
的矩形。 - 参数:整数坐标和尺寸。
- 示例:
QPainter painter(this); painter.drawRect(10, 10, 100, 50); // 绘制矩形:左上角(10,10),宽100,高50
1.2 drawRect(const QRect &rect)
- 功能:通过QRect对象绘制矩形。
- 参数:QRect对象(存储左上角坐标和宽高)。
- 示例:
QRect rect(10, 10, 100, 50); painter.drawRect(rect);
2. 浮点精度重载
2.1 drawRect(const QRectF &rect)
- 功能:使用浮点数坐标绘制矩形(更高精度)。
- 参数:QRectF对象(浮点型坐标和尺寸)。
- 示例:
QRectF rectF(10.5, 10.5, 100.5, 50.5); painter.drawRect(rectF);
3. 线宽与样式设置
通过QPen可以自定义矩形边框的宽度、颜色、样式(实线、虚线等),通过QBrush可以填充矩形内部:
QPainter painter(this);
// 设置边框
QPen pen(Qt::blue); // 蓝色边框
pen.setWidth(2); // 线宽2像素
pen.setStyle(Qt::DashLine); // 虚线样式
painter.setPen(pen);
// 设置填充
QBrush brush(Qt::green, Qt::Dense3Pattern); // 绿色+密集点图案
painter.setBrush(brush);
// 绘制带边框和填充的矩形
painter.drawRect(10, 10, 100, 50);
4. 绘制多个矩形
若需绘制多个矩形,可使用drawRects()
系列函数提高效率:
// 方法1:使用QRect数组
QRect rects[] = {
QRect(10, 10, 50, 50),
QRect(70, 10, 50, 50),
QRect(10, 70, 50, 50),
QRect(70, 70, 50, 50)
};
painter.drawRects(rects, 4); // 绘制4个矩形
// 方法2:使用QVector<QRect>
QVector<QRect> rectVector;
rectVector << QRect(10, 10, 50, 50) << QRect(70, 10, 50, 50);
painter.drawRects(rectVector);
5. 仅填充不绘制边框
若只需填充矩形内部(无边框),可使用fillRect()
:
// 填充矩形(无边框)
painter.fillRect(10, 10, 100, 50, Qt::green);
6. 应用场景
- 绘制UI组件(按钮、文本框等)的背景。
- 创建图形界面的布局框架。
- 实现柱状图、进度条等可视化元素。
总结
重载形式 | 适用场景 |
---|---|
drawRect(int, int, int, int) | 整数坐标的矩形 |
drawRect(const QRect&) | 使用QRect对象 |
drawRect(const QRectF&) | 浮点型坐标的高精度矩形 |
drawRects() 系列 | 批量绘制多个矩形 |
fillRect() | 仅填充矩形内部(无边框) |
通过结合QPen和QBrush的属性设置,drawRect()
可以实现各种矩形的绘制需求,包括空心、实心、带图案填充等效果。