QWidget closeEvent(...)未通过QProcess :: terminate()

时间:2018-09-20 20:31:16

标签: c++ windows qt qwidget qprocess

我有一个Qt应用程序(A),它可以作为Windows系统任务栏应用程序运行。

我还有另一个Qt应用程序(B),用于启动/关闭任何可执行文件。

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

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

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

关闭实际具有窗口(窗体)的应用程序没有问题。仅有此一个无窗口系统托盘应用程序(A)出现了问题。

我已经重写了从未触发/调用的QWidget :: closeEvent(...)。

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

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

1 个答案:

答案 0 :(得分:0)

需要一个表单来接收closeEvent。

  当Qt从窗口系统收到对顶级控件的窗口关闭请求时,会使用给定事件调用

[closeEvent]。

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

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

现在,当应用程序(B)发送QProcess :: terminate()时,将触发closeEvent并按预期关闭所有内容!

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

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

Qt Hide Taskbar Item