painter.save和painter.restore函数失效解决办法

解决方法

第一步按照路径实线绘制直线,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);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

守静向光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值