当QPen的线宽(如pen.setWidth(2))变大时,绘制出来的线条粗细会增加,但是同时也会使得线条两端超出绘图区域。这是因为线条是以画笔中心为基准进行绘制的。
如果不希望线条超出绘图区域,可以考虑在绘制时将起点和终点坐标适当调整。以下是一个示例代码:
void MyWidget::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
QPen pen(Qt::red);
pen.setWidth(5); // 设置线宽为5
painter.setPen(pen);
QPoint start(50, 50);
QPoint end(width() - 50, height() - 50);
// 计算需要调整的距离
int dx = (end.x() - start.x()) * (pen.width() / 2) / QLineF(start, end).length();
int dy = (end.y() - start.y()) * (pen.width() / 2) / QLineF(start, end).length();
// 调整起点和终点坐标
start.setX(start.x() + dx);
start.setY(start.y() + dy);
end.setX(end.x() - dx);
end.setY(end.y() - dy);
// 绘制线条
painter.drawLine(start, end);
QWidget::paintEvent(event); // 调用基类函数进行其他绘制
}
在该示例中,我们先计算了需要调整的距离,然后将起点和终点坐标适当调整。最后,我们使用QPainter的drawLine()函数绘制线条,并调用QWidget的paintEvent()函数以便进行其他绘制。这样就可以避免线条超出绘图区域的问题。