开发环境:我是在deepin(深度)系统下开发的,在我本机上,一点问题也没有,但是我移植到了ubantu的机子上,就偶尔出现出个问题,出现了一个模态框,需要重启软件才能关闭。
问题描述:在将导出台账成.xlsx文件时,出现了这个问题,那是一头雾水,想了很久,就在今天终于找到问题了。因为导出台账成.xlsx文件时,会调用进度条显示给用户,让用户等待导出完成,如下所示
可是数据量太小时,进度条一闪而过,基本就是一 progressDialog.show()打开,马上就ProgressDialog.close()调用关闭了,然后就出现了如下的这个模态框,出现模态框也是因为我把进度条的属性设置为模态框属性了,只能放大和缩小,无法移动,只能重启。
解决思路:想了很久,想不出啥思路,直接测试了下代码调用
- progressDialog.setLabelText("666666");
- progressDialog.show();
- progressDialog.close();
在深度系统下,这种代码,进度条一打开就关闭,肉眼根本无法察觉
但是在ubantu系统下,这个代码就会出问题,关闭不了,调用close进度条关闭后框框还在,相当于close失败了。咋办,我调试时这个问题又不出现了,在台账导出时,也是偶尔出现,特别是导出的数据量少的情况下。这时候,最终和大佬讨论就想到了可能是系统问题,反应不过来导致的,后面写测试代码,在close前加入了50ms的休眠,没有问题了,正常关闭
这种问题就比较难搞,但最终和大佬讨论出来了,判断,ubantu系统问题,一开马上关,反应不过来,导致的。
解决方案:在调用close前加入延时就行了,延时个几十毫秒就ok了
- progressDialog.setLabelText("666666");
- progressDialog.show();
- QThread::msleep(50);
- progressDialog.close();