解决方法
第一步按照路径实线绘制直线,painter.save保存了方案一的画笔、画刷、颜色等设置;按照路径虚线绘制完直线后,painter.restore函数恢复方案一的画笔、画刷、颜色等设置,继续按照路径绘制实线。QPainterPath定义不同的变量存放LowerCarPark_path1和MajorWell_path1存放路径的多个坐标,然后按照路径绘制直线;不要使用同一个变量在多处使用按照路径绘制虚线和实线,否则painter.save和painter.restore函数作用就失效了。
具体代码分析
/*------------1、设置画笔画刷颜色-----------*/
//反锯齿设置
//painter.setRenderHint(QPainter::Antialiasing);
painter.setRenderHint(QPainter::HighQualityAntialiasing);//高质量抗锯齿
QPen pen1( QBrush( Qt::red) , 15);
pen1.setColor(Qt::blue);
pen1.setWidth(1);
painter.setPen(pen1); //替换画家手中原来的画笔 **重要**
painter.save(); //保存以上方案一设置
/****------2、按照路径绘制:实线绘制------****/
//设置画笔风格 虚线形式
pen1.setStyle(Qt::DashLine);
//将画笔添加给画家
painter.setPen(pen1);
QPainterPath LowerCarPark_path1;
LowerCarPark_path1.moveTo(981.2974+translationX, -175.7074+translationY);
static const QPointF wellhole_points5[4] = {
//路径2 下直线
QPointF(995.1691+translationX, -166.0407+translationY),
QPointF(990.6518+translationX, -160.6009+translationY)
};
for(int i=0;i<2;i++)
{
//添加从当前位置绘制到给定的多个点直线
LowerCarPark_path1.lineTo(wellhole_points5[i]);
}
painter.drawPath(LowerCarPark_path1);
/*********----painter.save和painter.restore成对出现----*********/
painter.restore();//恢复方案一设置,尽量保存画笔和画刷的设置(实物、蓝色),其他的不要掺和。
/*******------3、按照路径绘制:实线绘制------*****/
QPainterPath MajorWell_path1;
MajorWell_path1.moveTo(959.8198+translationX, -351.2469+translationY);
static const QPointF Wells_points1[3] = {
QPointF(959.8158+translationX, -123.0491+translationY),
QPointF(957.1243+translationX, -123.0492+translationY),
QPointF(957.1243+translationX, -352.1547+translationY),
};
for(int i=0;i<3;i++)
{
//添加从当前位置绘制到给定的多个点直线
MajorWell_path1.lineTo(Wells_points1[i]);
}
painter.drawPath(MajorWell_path1);