如何解决如何停止关闭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”,但是由于某些原因,按下关闭按钮时不会调用它。
如果某些进程仍在工作,我想阻止用户关闭应用程序。
关于我可能如何实现的任何想法?
解决方法
您可以任一:
-
子类
QMainWindow
,而不是QWidget
-
覆盖
QMainWindow::closeEvent
,而不是QWidget::closeEvent
-
在堆栈上而不是堆上分配
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进行一些其他更改。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。