QApplication和处理X服务器关闭

时间:2011-11-10 19:32:38

标签: qt x11

我有一个在Linux机器上运行的Qt应用程序,它在运行X服务器的Windows机器上显示UI窗口。我的应用程序的用户很可能会在不退出我的应用程序的情况下注销Windows或终止X服务器。

有没有办法处理X服务器的意外关闭,以便应用程序可以正常关闭,保存存储的数据等?到目前为止,我已经尝试将QApplication的aboutToQuit信号绑定到我的应用程序中的一个插槽,并且还捕获了main中的所有异常。两者都没有像我预期的那样奏效。

3 个答案:

答案 0 :(得分:1)

我认为最好的办法是尝试通过signal handling

来处理

取决于应用程序如何被操作系统杀死,优雅地退出可能会或可能根本不可能。

答案 1 :(得分:0)

我不确定,但也许这个QCoreApplication::aboutToQuit()信号可以帮到你。

答案 2 :(得分:0)

如果与 X 服务器的连接丢失,则应用程序内部的 libX11 调用 _XIOError() 函数,该函数调用调用 _XDefaultErrorexit() 处理程序。可以使用自定义处理程序覆盖它:

#include <X11/Xlib.h>

static int handler(Display *dpy)
{
    /* 
     * cleanup
     * ...
     */

    exit(1);
    return 0;
}

...

int main(int argc, char** argv)
{
    QApplication app(argc, argv);
    XSetIOErrorHandler(handler);
    ...

最好仍然在处理程序中调用 exit(),因为如果没有正确的 X 连接,Qt 无论如何都会出现段错误。