如何阻止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();

并且CCD_ 6将被调用。

使Window类成为事件过滤器,并将其安装在主窗口对象上。您将在Window中重新实现filterEvent方法。别忘了把它安装在主窗口上!并确保过滤器过滤掉事件-布尔结果指示是让结果通过还是过滤掉。查找所需的确切值来指示其中一个——这是一个糟糕的api,我永远不记得true还是false符合我的意图。这是一种经典的情况,枚举返回值会更好地工作,比如Qt::Accept/Qt::Reject或类似的情况。

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

相关内容

  • 没有找到相关文章

最新更新