2017-08-29 207 views
2

我想在用戶按下退出按鈕時在新窗口中創建一條消息。因此,我創建了一個QCloseEvent,但MainWindow實際上並沒有關閉。我究竟做錯了什麼?C++ Qt QCloseEvent不起作用

Mainwindow.h

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    //Constructor 
    explicit MainWindow(QWidget *parent = 0); 

    //Destructor 
    ~MainWindow(); 

public slots: 
    void closeMainWindow(); 

private: 
    QCloseEvent *event; 

MainWindow.cpp

void MainWindow::closeMainWindow(){ 

    event = new QCloseEvent(); 
    QMessageBox::StandardButton answer = QMessageBox::question(
       this, 
       tr("Close the Window"), 
       tr("Do you want to close the window?"), 
       QMessageBox::Yes | QMessageBox::No); 

    if(answer == QMessageBox::Yes){ 
     event->accept(); 
    } 
    else 
     event->ignore(); 
} 
+0

你的錯誤是接下來:你創建了一個事件,但你沒有發送。 –

回答

2

您必須實現主窗口的closeEvent功能!

void MyMainWindow::closeEvent(QCloseEvent *event) 
{ 
    QMessageBox::StandardButton answer = QMessageBox::question(
       this, 
       tr("Close the Window"), 
       tr("Do you want to close the window?"), 
       QMessageBox::Yes | QMessageBox::No); 

    if(answer == QMessageBox::Yes){ 
     event->accept(); 
    } 
    else 
     event->ignore(); 
} 
+0

好的,謝謝你..但還是得到了答案。我想使用連接命令,所以我想調用closeEvent,當用戶點擊一個按鈕時。 因此,我寫了這個代碼: ''的QObject ::連接(出口,信號(觸發(布爾)),主窗口,SLOT(的closeEvent()));'' 但是編譯器說,他可以」找到closeEvent。我想是的,因爲closeEvent是一個受保護的功能,但它必須是公共插槽功能,對吧? – Blacktiger800

+1

@ Blacktiger800是的,你需要使用一個'close'插槽。請首先閱讀Qt文檔。 –