296_C++_一个dialog对话框在执行exec向系统发送一个延后销毁事件时,另一个对话框立刻接管了上一个对话框的销毁事件,导致死UI
1、根因分析
-根因分析:
当有新版本并且grade等级是2的时候,点击ptz的时候使用的是RSDialog,WA_DeleteOnClose属性默认是为true的,
并且是栈上的变量,当关闭ptz的时候,diolog的exec结束会向系统发送延后销毁事件,此时退出ptz会弹出自动升级对话框,接管了
事件循环,则会调用前面对话框的删除事件,相当于删除了栈上的变量
-解决方案:
1.
可把ptz的dialog修改为new出来的方式 、2.
设置WA_DeleteOnClose属性为false,让它栈上自己销毁
2、WA_DeleteOnClose
是 QWidget 类的一个属性,用于指定在窗口关闭时是否自动释放内存。
WA_DeleteOnClose并不是一个变量,而是Qt框架中对于QWidget的一个属性。
WA_DeleteOnClose
是 QWidget 类的一个属性,用于指定在窗口关闭时是否自动释放内存。如果设置为 true,窗口关闭时,QWidget 对象会被自动删除,释放其在堆上分配的内存;如果设置为 false,则对象不会被自动删除,需要手动释放内存。
关于"栈上的变量"的提到,可能是在上下文中提到了对话框对象是在栈上创建的,但与 WA_DeleteOnClose 属性本身无关。这个属性影响的是在堆上分配的内存的释放行为。
所以,关于解决方案中的两点:
- 将"ptz"的对话框改为在堆上动态分配内存(使用
new
),是