我正在学习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章)
答案 0 :(得分:5)
您不必在子类中重新实现MainWindow :: close()。 来自Qt Docs:
...当您调用QWidget :: close()关闭窗口小部件时发送的QCloseEvent 编程...
如果你想控制这个事件,你只需要重新实现MainWindow :: closeEvent(QCloseEvent * event)。
单击x
或从代码中调用close()时会触发此事件。
答案 1 :(得分:1)
closeEvent
及相关方法实际上并不执行收到给定事件时发生的操作。它们只允许您对事件采取行动,并可能禁用其进一步处理。关闭窗口是在QWidget::event
内完成的,其中closeEvent
来自。{/ p>