我正在学习 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 章)
您不必在子类中重新实现 MainWindow::close()。 来自 Qt 文档:
...当您调用 QWidget::close() 关闭小部件时发送 QCloseEvent 以编程方式...
所以如果你想控制这个事件,你只需要重新实现MainWindow::closeEvent(QCloseEvent *event)即可。
当您单击
x
或从代码中调用 close() 时,会触发此事件。
closeEvent
和相关方法实际上并不执行收到给定事件时发生的操作。它们仅允许您对事件采取行动,并可能禁用其进一步处理。窗口的关闭是在 QWidget::event
内完成的,其中 closeEvent
是从其中调用的。
我意识到这篇文章很旧,没有必要对此发表评论。因此,检测到窗口上的“关闭”“x”点击并重新实现 QCloseEvent *事件被执行。但是,当我向重新实现的函数添加任何代码时( ?)没有一个被运行/处理,这使得任务在窗口关闭时执行某些操作失败。