如何处理系统按钮Qt的控制台应用程序
问题描述:
单击我想创建Qt的控制台应用程序负责处理关闭,最小化和最大化控制台窗口的按钮。我的目标是在应用程序退出之前显示一些消息 - 即关闭按钮被单击。如何处理系统按钮Qt的控制台应用程序
此外,我希望应用程序最小化到系统托盘,而不是任务栏。但是,当用户点击其中一个系统按钮时,似乎没有任何信号或事件可以处理。
它甚至有可能?
答
我不认为你能处理这样的“信号”(最小化,最大化和关闭运行QCoreApplication终端窗口)通过Qt提供的API。
但QCoreApplication发送一个名为aboutToQuit()信号。也许你可以用它来做你想做的事(例如在终端上写),只是不知道用户是否能够及时阅读。
关于应用最小化到托盘:还是那句话,可能无法做到在使用Qt API的终端应用。但是在QApplication(它有一个窗口)是完全可能的。请参阅this answer以获得类似的SO问题。
答
您使用的是Unix/Linux还是Windows? 如果您使用Unix或Linux,您可能需要查看Posix/Unix信号。 他们不提供最大化/最小化按钮, 任何解决方案,但他们给你的可能性,当你点击关闭按钮时至少赶上系统信号。根据我的经验,aboutToQuit()Signal不如信号处理程序的自定义覆盖。
只要你捕捉到信号,你可以自己处理它。
下面是自定义信号处理函数一个很好的教程:
答
您可以使用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下工作过
我知道“aboutToQuit()”信号,而是根据文件没有用在这种状态下可以进行交互。我也知道如何创建系统托盘图标和菜单,它的工作原理,我只是无法捕捉按钮点击,从而调用适当的处理程序。 你是对的,这是不可能在Qt中,但有一个WinApi处理程序'SetConsoleCtrlHandler',我可以安装并处理系统点击,但我无法正常工作。我放弃;我的应用程序将有一个简单的GUI ... – vitakot 2012-01-12 17:37:31