如何在Qt控制台应用程序中单击系统按钮

时间:2012-01-12 16:48:18

标签: qt

我想在Qt中创建一个控制台应用程序,它处理控制台窗口的Close,Minimize和Maximize按钮。我的目标是在应用程序退出之前显示一些消息 - 即单击“关闭”按钮。

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

甚至可能吗?

3 个答案:

答案 0 :(得分:1)

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

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

关于最小化托盘的应用程序:同样,可能无法在使用Qt API的终端应用程序中执行此操作。但是在QApplication(有一个窗口)中它是完全可能的。请参阅this answer类似的问题。

答案 1 :(得分:0)

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

一旦你发现了信号,你就可以自己处理它。

以下是自定义信号处理程序的一个很好的教程:

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

答案 2 :(得分:0)

您可以在Linux和Windows中使用POSIX信号     #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