场景
在使用自定义的Dialog
对json格式的配置文件展示、编辑窗口时,重写了关闭事件,以确保每次关闭窗口时,都能将配置保存下来。在测试的过程中发现,打开Dialog
ts窗口后,使用Esc
按钮关闭窗口,但是没有触发自定义的关闭事件。
思路
看了一下前辈们的解释:
在Dialog
中的按下Esc
按钮,将会触发QDialog.reject()
函数。当Dialog中的QDialog.reject()
没有被重写时,会调用QDialog.done(p_int)
。QDialog.done(p_int)
会关闭Dialog窗口,同时返回p_int
。
在Dialog
中能够实现关闭窗口且不触发的QDialog.closeEvent()
函数除了上面提到的QDialog.reject()
、QDialog.done()
,还有QDialog.accept()
函数。
既然Esc按钮没有触发关闭事件,那就在自定义的Dialog窗口中,重写Esc事件使其触发我们自定义的关闭事件。或者说重写QDialog.reject()
。
实现
def keyPressEvent(self, event):
if event.key() == Qt.Key_Escape:
self.close()
完整示例代码:qt Dialog自定义右上角的按钮