2017-08-29 3 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

ありがとうございました..しかし、まだ答えがあります。私はconnectコマンドを使用したいので、ユーザーがボタンをクリックしたときにcloseEventを呼びたいと思います。 したがって、私はこのコードを書いた: ''はQObjectは::(出口、SIGNAL(トリガー(ブール値))、メインウィンドウ、SLOT(closeEvent()))接続; '' しかし、コンパイラは「彼ができることを言いますcloseEventを見つける。 closeEventは保護された関数なので、私はそうだと思いますが、パブリックスロット関数でなければなりません。 – Blacktiger800

+1

@ Blacktiger800はい、 'close'スロットを使う必要があります。まずQtのドキュメントをお読みください。 –

0

あなたは

if(answer == QMessageBox::Yes) 
{ 
    event->accept(); 
    close(); 
} 

またはメインウィンドウ

のcloseEvent()関数をオーバーライド近い()関数が欠落しているが、リンクの下に参照してください。 Generating a QCloseEvent won't close QMainWindow

関連する問題