1. 程式人生 > >QT對話方塊去掉幫助和關閉按鈕 攔截QT關閉視窗的CloseEvent

QT對話方塊去掉幫助和關閉按鈕 攔截QT關閉視窗的CloseEvent

建了一個對話方塊,我不想把邊框去掉,只想去掉關閉按鈕,
setWindowFlags(windowFlags()&~Qt::WindowCloseButtonHint&~Qt::WindowContextHelpButtonHint);
結果那個問號的按鈕去掉了,但是關閉按鈕還在,求助啊

setWindowFlags(Qt::WindowTitleHint | Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint);
這樣就行了,哈哈!
 

setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowMinimizeButtonHint | Qt::WindowMaximizeButtonHint);
還是簡單點好!

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();  //接受退出訊號,程式退出
    }
}