我有一个从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";,但由于某种原因,按下关闭按钮时不会调用它。
如果某个进程仍在工作,我想阻止用户关闭应用程序。
有什么想法可以让我实现吗?
您可以任一:
-
子类
QMainWindow
,而不是QWidget
-
覆盖
QMainWindow::closeEvent
,而不是QWidget::closeEvent
-
在堆栈上分配
QMainWindow
子类,而不是在堆上,即:MyMainWindowSubclass window;
或:
将您的代码更改为:
QApplication app(argc, argv);
Window w;
window->show();
app.exec();
并且CCD_ 6将被调用。
使Window类成为事件过滤器,并将其安装在主窗口对象上。您将在Window中重新实现filterEvent
方法。别忘了把它安装在主窗口上!并确保过滤器过滤掉事件-布尔结果指示是让结果通过还是过滤掉。查找所需的确切值来指示其中一个——这是一个糟糕的api,我永远不记得true还是false符合我的意图。这是一种经典的情况,枚举返回值会更好地工作,比如Qt::Accept
/Qt::Reject
或类似的情况。
实际上,我找到了另一个解决问题的方法,我觉得它更令人愉快。我可以创建一个从QMainWindow继承的自定义类主窗口,并使用它来代替QMainWindow。这可能更合适,因为我可能还需要对QMainWindow进行一些其他更改。