在qt应用程序中使用closeEvent不会关闭它

Tha*_*lia 2 qt quit

我正在学习qt,并试验教科书中的例子.

原始教科书代码具有以下内容,设置为保存并关闭x按钮:

void MainWindow::closeEvent(QCloseEvent *event)
{
    if (okToContinue()) {
        writeSettings();
        event->accept();
    } else {
        event->ignore();
    }
}
Run Code Online (Sandbox Code Playgroud)

我在其菜单中尝试了一个简单的退出 - 它的工作原理如下:

void MainWindow::close()
{
    if (okToContinue()) {
        QApplication::quit();
    }
}
Run Code Online (Sandbox Code Playgroud)

但我想利用已经编写的closeEvent,所以我用上面的代码替换了

void MainWindow::close()
{
    QCloseEvent *event = new QCloseEvent();
    closeEvent(event);
}
Run Code Online (Sandbox Code Playgroud)

我通过okToContinue函数实现了检查更改和保存应用程序.但应用程序没有关闭.

我试图通过调试和...我的小理解,似乎有一个关闭信号被发送...

我对此没有很好的理解,有人可以帮我弄清楚我做错了什么以及如何解决它?

(示例代码来自C++ GUI Programming with Qt 4,第3章)

fol*_*bis 5

您不必在子类中重新实现MainWindow :: close().来自Qt Docs:

...当您调用QWidget :: close()以编程方式关闭窗口小部件时发送的QCloseEvent ...

因此,如果要控制此事件,则必须重新实现MainWindow :: closeEvent(QCloseEvent*event).

单击x或从代码中调用close()时会触发此事件.