如何阻止 QT Widget 关闭?

How can i stop QT Widget from closing?

我有一个继承自 QWidget(不是 QMainWindow)的 class (Window)。 这是我主要功能的重要部分。

 QApplication app (argc, argv);

 QMainWindow *window = new QMainWindow;

 QMenuBar *tool_bar = new QMenuBar (window);

 Window *graph_area = new Window (arguments);

 window->setMenuBar (tool_bar);
 window->setCentralWidget (graph_area);
 window->show ();
 app.exec ();

我以为我会覆盖“closeEvent”,但出于某种原因,当按下关闭按钮时它没有被调用。

如果某些进程仍在运行,我想阻止用户关闭应用程序。

关于我如何实现它有什么想法吗?

您可以:

  1. 子类 QMainWindow,而不是 QWidget

  2. 覆盖 QMainWindow::closeEvent,而不是 QWidget::closeEvent

  3. 在栈上分配你的 QMainWindow 子类,而不是在堆上,即:

     MyMainWindowSubclass window;
    

:

将您的代码更改为:

QApplication app(argc, argv);

Window w;

window->show();

app.exec();

Window::closeEvent将被调用。

使您的 Window class 成为事件过滤器并将其安装在主 window 对象上。您将在 Window 中重新实现 filterEvent 方法。不要忘记将它安装在主 window 上!并确保过滤器将事件过滤掉——布尔结果表明您是让结果通过还是将其过滤掉。查找指示其中任何一个所需的确切值 - 这是一个糟糕的 api,我永远不记得我想要的是真还是假。这是一个 class 枚举 return 值会更好的例子,例如 Qt::Accept/Qt::Reject 或类似的。

我实际上找到了解决我的问题的另一种方法,我觉得它更令人愉快。我可以创建一个继承自 QMainWindow 的自定义 class 主窗口,并使用它代替 QMainWindow。它可能更合适,因为我可能还需要对 QMainWindow 进行一些其他更改。