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
我有一个作为 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