注销侏儒会话时如何从Qt应用程序执行"confirm" gnome会话管理器的对话框(不使用QSessionManager)

How to execute "confirm" dialog of gnome session manager from Qt application when logout gnome session (without using QSessionManager)

本文关键字:会话 对话框 管理器 QSessionManager gnome confirm Qt 注销 执行 应用程序      更新时间:2023-10-16

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

通常,当我在运行应用程序时执行"注销"时,实际上,应用程序终止,会话注销。我该如何抑制这种情况并允许Gnome会话管理器确认终止,或者在由应用程序决定的处理终止之前不允许注销(和应用程序终止)。

对我来说,优先考虑如下

  1. 会话管理器询问会话结束
  2. 未执行注销处理(会话终止处理)直到在应用程序端退出

我尝试了以下操作,但没有达到预期的行为(阻止注销)。应用程序随着注销执行而终止。

  • 捕获SIGHUP和SIGTERM,并在信号处理程序中运行while(1)循环
  • 捕获SIGHUP和SIGTERM,并在信号处理程序中生成一个含义为"Do you really want to quit?"的QMessageBox,然后运行exec()来停止终止进程的主线程的进程
  • 覆盖应用程序主窗口小部件(QWidget)的closeEvent(),生成一个含义为"Do you really want to quit?"的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及其相关的所有进程在配置/构建的库中无效,我不能用它。

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