课程设计总结之Qt(4)

捕捉窗口关闭事件:

在写界面时,为了交互性更好,我们通常需要捕捉窗口的某些事件,然后给用户提示。比如:用户要点击关闭时,友好地提示一下用户是否真的关闭窗口。这就需要捕捉窗口的关闭事件,首先需要在头文件中包含:#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()函数时,所有的窗口都会关闭、销毁。界面编程中,你不可能只要一两个窗口,所以这个全局的程序变量还是非常的方便的。

 

;