如何阻止 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”,但出于某种原因,当按下关闭按钮时它没有被调用。
如果某些进程仍在运行,我想阻止用户关闭应用程序。
关于我如何实现它有什么想法吗?
您可以:
子类 QMainWindow
,而不是 QWidget
覆盖 QMainWindow::closeEvent
,而不是 QWidget::closeEvent
在栈上分配你的 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 进行一些其他更改。
我有一个继承自 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”,但出于某种原因,当按下关闭按钮时它没有被调用。
如果某些进程仍在运行,我想阻止用户关闭应用程序。
关于我如何实现它有什么想法吗?
您可以:
子类
QMainWindow
,而不是QWidget
覆盖
QMainWindow::closeEvent
,而不是QWidget::closeEvent
在栈上分配你的
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 进行一些其他更改。