【发布时间】:2015-09-23 18:23:30
【问题描述】:
我想在 Qt 中创建一个控制台应用程序来处理控制台窗口的关闭、最小化和最大化按钮。我的目标只是在应用程序退出之前显示一些消息 - 即单击关闭按钮。
此外,我希望将应用程序最小化到系统托盘而不是任务栏。但是,当用户单击其中一个系统按钮时,似乎没有可以处理的信号或事件。
有可能吗?
【问题讨论】:
标签: qt
我想在 Qt 中创建一个控制台应用程序来处理控制台窗口的关闭、最小化和最大化按钮。我的目标只是在应用程序退出之前显示一些消息 - 即单击关闭按钮。
此外,我希望将应用程序最小化到系统托盘而不是任务栏。但是,当用户单击其中一个系统按钮时,似乎没有可以处理的信号或事件。
有可能吗?
【问题讨论】:
标签: qt
我认为您无法通过 Qt 提供的 API 处理此类“信号”(最小化、最大化和关闭运行 QCoreApplication 的终端窗口)。
但是QCoreApplication 发送了一个名为aboutToQuit() 的信号。可能你可以用它来做你想做的事(比如在终端里写),只是不知道用户是否能及时阅读。
关于将应用程序最小化到托盘:同样,在使用 Qt API 的终端应用程序中可能无法做到这一点。但在QApplication(有一个窗口)中完全有可能。请参阅this answer 到类似的 SO 问题。
【讨论】:
您可以在 Linux 和 Windows 中使用 POSIX 信号 #包括
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 中运行
【讨论】:
您使用的是 Unix / Linux 还是 Windows? 如果您使用的是 Unix 或 Linux,您可能需要查看 Posix / Unix Signals。 他们没有为最大化/最小化按钮提供任何解决方案, 但是当您按下关闭按钮时,它们至少可以让您捕捉到系统信号。根据我的经验,aboutToQuit() 信号不如信号处理程序的自定义覆盖快。
一旦你捕捉到信号,你就可以自己处理它。
这是自定义信号处理程序的一个很好的教程:
【讨论】: