QWidget closeEvent(...) 未被调用 QProcess::terminate()

QWidget closeEvent(...) Not Being Called with QProcess::terminate()

我有一个作为 Windows 系统托盘应用程序运行的 Qt 应用程序 (A)。

我还有另一个 Qt 应用程序 (B) launches/closes 任何可执行文件。

如果我尝试使用其系统托盘上下文菜单关闭应用程序 (A),一切都会按预期进行(进程被终止,系统托盘图标消失)。

但是,如果我尝试通过应用程序 (B) 关闭应用程序 (A),应用程序 (A) 的系统托盘图标消失,但其进程仍在后台 运行。我必须强制终止进程才能退出。

应用程序 (B) 使用 QProcess 启动可执行文件。当请求时,它调用 QProcess::terminate() 来关闭启动的应用程序。

关闭实际具有 windows(表单)的应用程序没有问题。只有这个 windowless 系统托盘应用程序 (A) 有问题。

我已经覆盖了 QWidget::closeEvent(...),它永远不会是 triggered/called。

如何在应用程序 (A) 中触发 closeEvent(...)?

Qt 文档暗示 closeEvent 由 window 关闭请求触发,这可能是问题所在,因为应用程序 (A) 没有 windows。我需要给应用程序 (A) 一个表单并隐藏它吗?

原来需要一个表单来接收 closeEvent。

[closeEvent] is called with the given event when Qt receives a window close request for a top-level widget from the window system.

我在应用程序 (A) 中添加了一个表单并将其隐藏。

setStyleSheet( "background: transparent;" );
setAttribute( Qt::WA_TranslucentBackground );

现在,当应用程序 (B) 发送 QProcess::terminate() 时,closeEvent 被触发,一切都按预期关闭!

好吧,几乎...我没想到的是,即使隐藏了 window,它仍然有一个任务栏按钮。为了删除它,我在构造函数中添加了以下内容:

setWindowFlags( Qt::SubWindow ); 
show();

Qt Hide Taskbar Item