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

时间:2014-08-07 20:52:20

标签: qt quit

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

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

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

我在菜单中尝试了一个简单的退出 - 它可以工作:

void MainWindow::close()
{
    if (okToContinue()) {
        QApplication::quit();
    }
}

但我想利用已编写的closeEvent,所以我用

替换了上面的代码
void MainWindow::close()
{
    QCloseEvent *event = new QCloseEvent();
    closeEvent(event);
}

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

我试图通过调试来完成......我的理解很少,似乎发出了一个接近的信号......

我对此并不了解,有人可以帮我弄清楚我做错了什么以及如何解决?

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

2 个答案:

答案 0 :(得分:5)

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

  

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

如果你想控制这个事件,你只需要重新实现MainWindow :: closeEvent(QCloseEvent * event)。

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

答案 1 :(得分:1)

closeEvent及相关方法实际上并不执行收到给定事件时发生的操作。它们只允许您对事件采取行动,并可能禁用其进一步处理。关闭窗口是在QWidget::event内完成的,其中closeEvent来自。{/ p>