1. 程式人生 > >攔截QT關閉視窗的CloseEvent

攔截QT關閉視窗的CloseEvent

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

相關推薦

攔截QT關閉視窗CloseEvent

QDialog類下有一個虛擬函式void QDialog::closeEvent ( QCloseEvent * e ) [virtual protected] 通過實現closeEvent函式,就可以以對關閉視窗訊息進行攔截,比如程式還沒有完成工作時,可以彈出警

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

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

QT攔截關閉視窗事件

QDialog類下有一個虛擬函式 void QDialog::closeEvent ( QCloseEvent * e ) [virtual protected] 通過實現closeEvent函式,就可以以對關閉視窗訊息進行攔截,比如程式還沒有完成工作時,可以彈出警告視窗,即使使用者確認退出操作

Qt5.9關閉視窗時執行特定程式碼(解構函式、關閉視窗)(setAttribute(Qt::WA_DeleteOnClose)、closeEvent(QCloseEvent* event))

本文主要總結在關閉qt的QWidget子視窗瞬間,執行特定程式碼。由於主視窗關閉時,會自動執行解構函式,而子視窗關閉時,卻不會呼叫解構函式,進過博主查閱資料,發現有兩種方法可以在子視窗關閉時,呼叫解構函式或者執行一個關閉函式。 第一種方法是關閉視窗時呼叫視窗的解構函式,直接

2-Qt關閉視窗時執行特定程式碼

https://blog.csdn.net/naibozhuan3744/article/details/82689434   本文主要總結在關閉qt的QWidget子視窗瞬間,執行特定程式碼。由於主視窗關閉時,會自動執行解構函式,而子視窗關閉時,卻不會呼叫解構函式,進過博主查閱資料,發現有兩種

QT中設定當滑鼠在視窗外點選時關閉視窗

我們想要對某一個視窗進行這樣的設定: 當滑鼠在此視窗區域外點選時,將此視窗關閉。 一般來講,有以下幾種方式: 1.重寫滑鼠點選事件,判斷當前滑鼠座標

qt關閉視窗資源釋放問題

針對QDialog物件,如果是棧上分配的,就不存在資源洩漏問題,但是當物件是new出來的,並且以區域性對像存在,當關閉時,視窗只是隱藏,資源是沒有釋放的,每次exec後者需要delete來釋放,另外一種方法是在QDialog中設定屬性: setAttribute(Qt::

Qt4學習筆記(十 一),Qt 捕捉視窗關閉事件與訊號的捕捉

有時候我們希望在關閉視窗之前做一些操作,例如儲存快取資料或向用戶提示是否關閉視窗等等。由於一般的視窗都是繼承自QWidget, 那麼我們可以通過覆蓋QWidget中的虛擬函式closeEvent(QCl

QT 關閉視窗,觸發關閉所有開啟的視窗

之前碰到這個問題,今天解決了。 主視窗設定屬性Qt::WA_QuitOnClose w.setAttribute(Qt::WA_QuitOnClose,true); Qt::WA_QuitOnClose屬性是使視窗如果是最後一個關閉的時候觸發事件lastWindowClos

qt視窗繪製——圖片的繪製

在qt 中,QPixmap 用於表示一張圖片,支援png,jpg格式的載入。 QPixmap pm("c:/test.png"); 或者 QPixmap pm; pm.load("c:/test/png"); QT中圖片的路徑分為兩種: (1)檔案系統中的圖片:使用絕對路徑或者相對路徑。 (

第2篇 Qt5基礎(二)編寫Qt視窗程式

  1、通過程式碼來設定按鈕的中文文字會覆蓋以前在設計模式設定的文字,(另外,如果大家以前學過Qt 4,那麼現在可能會激動地發現不用在使用setCodecForTr()等函式就可以直接顯示中文了)不過,在程式碼中直接使用中文字不是一個好的習慣,建議在編寫程式時使用英文,當程式完成後使用

瀏覽器攔截開啟新視窗情況總結

在開啟一個新視窗時,由於瀏覽器的安全機制,使用者未始終允許的情況下,可能會觸發到瀏覽器攔截,無法正常直接彈出。 網上有很多給出解決方案的隻言片語,不夠全面,所以針對自己遇到的問題做了詳細的情況分析。總結成文,避免以後混淆。 只分析列舉使用 js 程式碼手動開啟新視窗的方式。 測試程式碼用例在此 幾種開

QT視窗退出全屏

m_pWidget代表子視窗, 子視窗顯示全屏: m_pWidget->setWindowFlags(Qt::Dialog); m_pWidget->showFullScreen(); 子視窗退出全屏: m_pWidget->showNormal(); m_pWid

關於Qt視窗的座標

主要是給自己以後參考,所以不會太仔細的講解。 1 #include "mainwindow.h" 2 #include <QApplication> 3 #include<QDebug> 4 int main(int argc, char *argv[]) 5 {

點選彈窗提示,3秒後關閉視窗並跳轉新的頁面

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="

QT視窗中畫圖的簡要總結

我還是個小白,現在在寫這篇部落格只是害怕我會忘記,但時候又要重新開始再來一遍是很浪費時間的,所以就簡單的總結一下我今天學到的東西吧。 今天要解決的問題主要是怎麼樣使得在QT上好像是在java上畫圖一樣呢?其實是可以的。 首先,建立一個新的子視窗,是要是QWidget型別的視窗 新建一個視窗

Qt 焦點視窗

Qt的視窗部件在圖形使用者介面中按使用者的習慣的方式來處理鍵盤焦點,一個焦點移出事件會被髮送給焦點視窗(如果有的話)告訴它關於焦點失去的事情.然後一個焦點進入事件被髮送給這個視窗部件告訴它剛剛接收到焦點. Qt的視窗部件在圖形使用者介面中按使用者習慣的方式來處理鍵盤焦點.基本出發點是使用者的點選

JavaScript新建視窗定時關閉視窗小案例

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>window物件</title> <script type="text/j

selenium之 關閉視窗close與quit

selenium關閉視窗有兩個方法,close與quit,我們稍作研究便知道這兩個方法的區別。 看原始碼或API close 這是close()的說明: Closes the current window. 關閉當前視窗。 quit 這是quit()的說明:

Qt 滾動視窗

1 { 2 QScrollArea *scrollArea = new QScrollArea(this); 3 scrollArea->setFrameStyle(0); 4 scrollArea->setVerticalScrollBarPolicy(Q