如何处理系统按钮Qt的控制台应用程序

问题描述:

单击我想创建Qt的控制台应用程序负责处理关闭,最小化和最大化控制台窗口的按钮。我的目标是在应用程序退出之前显示一些消息 - 即关闭按钮被单击。如何处理系统按钮Qt的控制台应用程序

此外,我希望应用程序最小化到系统托盘,而不是任务栏。但是,当用户点击其中一个系统按钮时,似乎没有任何信号或事件可以处理。

它甚至有可能?

我不认为你能处理这样的“信号”(最小化,最大化和关闭运行QCoreApplication终端窗口)通过Qt提供的API。

QCoreApplication发送一个名为aboutToQuit()信号。也许你可以用它来做你想做的事(例如在终端上写),只是不知道用户是否能够及时阅读。

关于应用最小化到托盘:还是那句话,可能无法做到在使用Qt API的终端应用。但是在QApplication(它有一个窗口)是完全可能的。请参阅this answer以获得类似的SO问题。

+0

我知道“aboutToQuit()”信号,而是根据文件没有用在这种状态下可以进行交互。我也知道如何创建系统托盘图标和菜单,它的工作原理,我只是无法捕捉按钮点击,从而调用适当的处理程序。 你是对的,这是不可能在Qt中,但有一个WinApi处理程序'SetConsoleCtrlHandler',我可以安装并处理系统点击,但我无法正常工作。我放弃;我的应用程序将有一个简单的GUI ... – vitakot 2012-01-12 17:37:31

您使用的是Unix/Linux还是Windows? 如果您使用Unix或Linux,您可能需要查看Posix/Unix信号。 他们不提供最大化/最小化按钮, 任何解决方案,但他们给你的可能性,当你点击关闭按钮时至少赶上系统信号。根据我的经验,aboutToQuit()Signal不如信号处理程序的自定义覆盖。

只要你捕捉到信号,你可以自己处理它。

下面是自定义信号处理函数一个很好的教程:

http://doc.qt.io/qt-5/unix-signals.html

您可以使用POSIX信号无论是在Linux和Windows 的#include

void quit_handle(int) { 
    qApp->quit(); 
} 
int main(int argc, char *argv[]) { 
    QCoreApplication a(argc, argv); 
    ... 
    signal(SIGINT, quit_handle); 
    return a.exec(); 
} 

我只能在Windows进行了测试+ MinGW的,但我认为这将在Linux下工作过