2015-09-16 26 views
1

我想在用戶離開之前顯示確認消息框並阻止屏幕(alt + tab(關閉或鬆散焦點))MainWindow。這個怎麼做?如何在離開(關閉或失去焦點)窗口之前顯示模式確認消息?

這裏是我的代碼

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
#include <QMessageBox> 

MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
    QMainWindow::showFullScreen(); 
    this->installEventFilter(this); 
} 

MainWindow::~MainWindow() 
{ 
    delete ui; 
} 

bool MainWindow::eventFilter(QObject *obj, QEvent *event){ 
    if(event->type() == 128){ 
     QMessageBox::information(this, "title", "text", QMessageBox::Ok | QMessageBox::Cancel); 

     return true; 
    } 

    return true; 
} 
+1

如果用戶「離開」你的窗口,你的窗口失去焦點* *,就表示該事件。然而,嘮叨用戶是因爲這不是我認爲好的UI設計,並且會刺激用戶(我知道這會刺激我)很多。 –

+0

另外,失去焦點的窗口與正在關閉的窗口完全不同。您可能希望將標題更新爲更適合的內容。 –

+0

我想在點擊「確定」或「取消」按鈕之前屏蔽屏幕。這對我的應用程序非常重要。這不是平常的應用。我有Web視圖中它,如果用戶要打開不同的程序(點擊OK)我有發送請求到服務器(調用RESTful Web服務) – gogagubi

回答

1

對於近處的事件:在你的主窗口類

重新實現closeEvent方法。 Link

對於窗口激活和停用事件嘗試following

bool MainWindow::event(QEvent * e) // overloading event(QEvent*) method of QMainWindow 
{ 
    switch(e->type()) 
    { 
     // ... 

     case QEvent::WindowActivate : 
      // gained focus 
      break ; 

     case QEvent::WindowDeactivate : 
      // lost focus 
      break ; 
     // ... 
    } ; 
    return QMainWindow::event(e) ; 
} 
+0

這個變體像我以前的變體一樣工作。在用戶點擊「確定」或「取消」之前,仍然無法屏蔽alt +選項卡上的屏幕。 MessageBox保持背景。 – gogagubi

+0

它看起來像你應該描述你想以更容易理解的方式實現...要「激活」窗口,你可以嘗試調用方法activateWindow()http://doc.qt.io/qt-5/qwidget.html #activateWindow或raise() –

+0

但正如我寫的,它不清楚你最終想要達到什麼樣的行爲 –