如何停止关闭QT Widget?

问题描述

我有一个继承自QWidget(不是QMainWindow)的类(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类提供一个事件过滤器,并将其安装在主window对象上。您将在Window中重新实现filterEvent方法。不要忘记将其安装在主窗口中!并确保过滤器将事件过滤掉-布尔结果表明是让结果通过还是过滤掉。查找确切的值以指示任意一个-这是一个错误的api,我永远不会记住是真还是假。在经典情况下,枚举返回值可以更好地工作,例如Qt::Accept / Qt::Reject或类似的东西。

,

我实际上找到了解决我的问题的另一种方法,那就是我感到更愉快。我可以创建一个继承自QMainWindow的自定义类mainwindow,并使用它代替QMainWindow。可能更合适,因为我可能还需要对QMainWindow进行一些其他更改。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...