记录一个qt 窗口没有卡死,但是却拖动不了的bug

今天测试遇到一个奇怪的现象,窗口弹窗后,弹窗和父窗口都不能拖动了,但是窗口里面的UI还在继续,也没有死掉,几经排查,发现是以前的弹窗阻塞了父窗口和新弹出来的窗口。

窗口:

窗口A、窗口B是两个没有父子关系的窗口,

子窗口d1和子窗口d2是窗口A的两个子窗口,其中d1调用了

setWindowModality(Qt::WindowModal);

会阻塞窗口A和窗口A的子窗口。

 

操作:

窗口B中的按钮触发了窗口A弹出子窗口d1的操作,然后不小心点了窗口B的另一个按钮触发了弹出子窗口d2的操作,d2窗口比较大,正好遮住了窗口d1,导致d1因为被遮住而不能拖动,d2因为与d1同为窗口A的子窗口,导致窗口A和d2都被阻塞,于是窗口A和窗口d1、d2基本废了

 

解决方案:

如果窗口A弹出d1、d2都是在窗口A中触发,如果先弹出d1,那么由于d1的阻塞,就不会弹出d2

如果先弹出d2,那么由于d1是后弹出的,就不会被d2遮住

所以问题出在窗口A触发的环境,在窗口B触发窗口A的弹窗事件的时候,应该提前判断是否有未结束的模态弹窗,如果有的话,提示用户先完成上一次的弹窗操作。

或者,模态对话框置顶,保证其不会被遮住

 

后话:

如果窗口有边框和标题栏,鼠标操作模态对话框外面的UI的时候,windows窗口会有边框的明暗变化,可以更快的找到窗口拖动不了的原因,

你可能感兴趣的:(qt)