中止 QCloseEvent

Abort a QCloseEvent

在我的应用程序中,我正在处理 QCloseEvent(当按下关闭按钮 X 时):

void MainWindow::closeEvent(QCloseEvent* event)
{
    if ( !isAbortedFilestoSave() ) {
      this->close();
    }
    // else abort
}

如果没有按下中止键,则触发 if 子句。我想实现一个 QCloseEvent 被中止的 else 子句?怎么样?

您必须在事件上使用 ignore() 才能 "abort it" - 让 Qt 知道您不希望小部件实际关闭。

The isAccepted() function returns true if the event's receiver has agreed to close the widget; call accept() to agree to close the widget and call ignore() if the receiver of this event does not want the widget to be closed.

此外,您无需自己调用 close() - "X" 按钮已经完成了,这就是您收到关闭事件的原因!

所以你的代码应该是:

void MainWindow::closeEvent(QCloseEvent* event)
{
    // accept close event if are not aborted
    event->setAccepted(!isAbortedFilestoSave());
}