QT 摸不着头脑的bug之paint()画不出,在图形视图中画出的图形会飘。

前些天困扰我很多天的bug,无论从代码上看也没问题,编译也都过得去,调试下来也没问题。

一、开发环境

Vs2022+Qt 5.12.12

二、问题描述

        我使用的QWidget内置图形视图框架。qGraphicsView,qGraphicsScene,qGraphicsitem。

        在QWidget通过点击绘制item时,QWidget上的其他部件消失,等到绘制完成才会出来,这个效果其实是不错的。但会引发一系列的问题。而后item被显示在界面中时,周围的部件依然消失。

        并且我仔细观察过并没有隐藏的设计,调试也都一切正常,但是就无法显示出部件。

三、查询问题发生的原因

        也是大佬跟我说后我想起的查找问题的方式。

        查看Vs上的输出栏,如果找不到原因可以去试试水,如果是代码写的没问题但异常它会出现一些提示,我最终得到的异常的提示如下:

painter对象完成了它的任务,并且在结束绘制时,它保存了两个状态。

四、解决方案

        原因是我这里的代码有误,我写在QPainter中,只给它进行了save()没有restore(),导致的。

        在后面再加一个painter->restore()就好了。

        qpainter的save和restore是相辅相成的一定要配对使用。

五、扩展问题

        在绘制item后item会飘,异常。

        通过上述查询问题的方法得到

        Unbalanced save/restore,不平衡的保存/恢复

        原因是我这里的代码有误,我写在paint函数中,只给它进行了restore()没有save()导致的,最后在它之前加入painter->save()就好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值