1. 程式人生 > >QT攔截關閉視窗事件

QT攔截關閉視窗事件

QDialog類下有一個虛擬函式

void QDialog::closeEvent ( QCloseEvent * e ) [virtual protected]

通過實現closeEvent函式,就可以以對關閉視窗訊息進行攔截,比如程式還沒有完成工作時,可以彈出警告視窗,即使使用者確認退出操作

在標頭檔案中,需要加入#include <QCloseEvent>:

#ifndef TEST_H
#define TEST_H

#include <QDialog>
#include <QCloseEvent>

class ClientTest : public QDialog
{
    Q_OBJECT

public:
    ClientTest();
    void closeEvent(QCloseEvent *event);
 //後邊的具體實現省略
...

};
#endif

在cpp檔案中,對closeEvent函式進行實現:

void ClientTest::closeEvent(QCloseEvent *event)
{
    QMessageBox::StandardButton button;
    button = QMessageBox::question(this, tr("退出程式"),
        QString(tr("警告:程式有一個任務正在執行中,是否結束操作退出?")),
        QMessageBox::Yes | QMessageBox::No);

    if (button == QMessageBox::No) {
        event->ignore();  //忽略退出訊號,程式繼續執行
    }
    else if (button == QMessageBox::Yes) {
        event->accept();  //接受退出訊號,程式退出
    }
}