前些天困扰我很多天的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()就好。