捕捉窗口关闭事件:
在写界面时,为了交互性更好,我们通常需要捕捉窗口的某些事件,然后给用户提示。比如:用户要点击关闭时,友好地提示一下用户是否真的关闭窗口。这就需要捕捉窗口的关闭事件,首先需要在头文件中包含:#include<QCloseEvent>。
在Qt中,所有的窗口类均有一个虚函数处理窗口的关闭事件(继承于QWidget的保护成员函数):void closeEvent(QCloseEvent * event),这个函数默认是接收窗口的关闭,也就是点击窗口的'×'时,会默认调用此虚函数,如果想阻止窗口的关闭可以调用ignore()函数,它还有一个accept()函数代表接受关闭。
下面是文档中的例子:
void MainWindow::closeEvent(QCloseEvent *event)
{
if (maybeSave()) {
writeSettings();
event->accept();
} else {
event->ignore();
}
}
文档中的例子也是非常容易看懂,模仿它我们就可以实现自己想要的功能,在窗口类中的保护成员函数中加上void closeEvent(QCloseEvent *);的声明,然后我们就可以重写该虚函数:
void monitorTandH::closeEvent(QCloseEvent *event)
{
QMessageBox *tip=new QMessageBox;
tip->setAttribute(Qt::WA_DeleteOnClose);//设置属性为关闭销毁
int res=tip->question(this,"提示","你是要退出程序?",QMessageBox::Yes|QMessageBox::No);
switch (res){
case QMessageBox::Yes:
qApp->quit(); //退出
break;
case QMessageBox::No:
event->ignore();//阻止关闭事件
break;
default:
break;
}
}
qApp是Qt中一个全局的变量,代表的是整个应用程序,当它调用quit()函数时,所有的窗口都会关闭、销毁。界面编程中,你不可能只要一两个窗口,所以这个全局的程序变量还是非常的方便的。