如何在注销gnome会话(不使用QSessionManager)时从Qt应用程序执行gnome会话管理器的“确认”对话框

时间:2017-01-27 02:24:59

标签: c++ qt centos6 gnome qt4.8

我正在使用Qt4.8在CentOS6.3上开发应用程序

Normaly,当我在运行应用程序时执行“logout”时, 实际上,应用程序终止并且会话注销。 如何禁止此操作并允许Gnome会话管理器确认终止, 或者不允许注销(和应用程序终止),直到应用程序决定的处理终止。

对我来说,首选优先顺序如下

  1. 会话经理关于会话结束的查询
  2. 不执行注销处理(会话终止处理) 直到退出申请方
  3. 我尝试了以下操作,但没有预期的行为(阻止注销)。 应用程序在注销执行时终止。

    • 陷阱SIGHUP和SIGTERM,并在信号处理程序中运行while(1)循环。
    • Trap SIGHUP和SIGTERM,在信号处理程序中生成一个QMessageBox,意思是“你真的想退出吗?”,并运行exec()来停止终止进程主线程的进度。
    • 覆盖应用程序主窗口小部件(QWidget)的closeEvent(),生成一个QMessageBox,意思是“你真的想退出吗?”,然后运行exec()来停止终止进程主线程的进度。

    我试过的示例代码:

    void Widget::closeEvent(QCloseEvent *event)
    {
        int ret = QMessageBox::warning(
                            this,
                            tr("My Application"),
                            tr("Do you want to logout?"),
                            QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
        QWidget::closeEvent(event);
    }
    

    我发现Qt有一个名为QSessionManager的API的信息,并试图尝试, QSessionManager及其相关的所有进程在configureed / builded库中无效, 我无法使用它。

1 个答案:

答案 0 :(得分:1)

您可以使用gnome-session-quit触发GNOME对话框。如果您想使用D-Bus API,上述实用程序的source应该能够为您提供指导。