该方法是QWidget中的一个虚函数,可以通过重写该函数来达到控制窗体关闭的目的。
virtual void closeEvent(QCloseEvent* event) override;可以通过参数event来控制是否让窗体关闭。
QT官方文档对该函数的解释为:
当Qt从窗口系统收到对顶级窗体的关闭请求时,将使用给定事件调用此事件处理程序。默认情况下,事件被接受并且部件关闭。 您可以重新实现此功能,以更改小部件响应窗口关闭请求的方式。 例如,可以通过在所有事件上调用ignore()来防止窗口关闭。
void Widget::closeEvent(QCloseEvent *event)
{
QMessageBox::StandardButton button = QMessageBox::question(this,"询问","确定关闭吗?",QMessageBox::StandardButton::Yes,QMessageBox::StandardButton::No);
if(QMessageBox::StandardButton::Yes == button)
{
event->accept();//默认情况下接收关闭信号,关闭窗体
}
else
{
event->ignore();//忽略关闭信号,阻止窗体关闭
}
}