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

问题描述 投票:0回答:3

我正在学习 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 函数实现检查更改和保存应用程序。但应用程序不会关闭。

我尝试进行调试,并且..以我的一点理解,似乎正在发送关闭信号...

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

(示例代码来自《使用 Qt 4 进行 C++ GUI 编程》第 3 章)

qt quit
3个回答
4
投票

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

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

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

当您单击

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


2
投票

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


0
投票

我意识到这篇文章很旧,没有必要对此发表评论。因此,检测到窗口上的“关闭”“x”点击并重新实现 QCloseEvent *事件被执行。但是,当我向重新实现的函数添加任何代码时( ?)没有一个被运行/处理,这使得任务在窗口关闭时执行某些操作失败。

© www.soinside.com 2019 - 2024. All rights reserved.