2017-08-29 165 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文档。 –