注销侏儒会话时如何从Qt应用程序执行"confirm" gnome会话管理器的对话框(不使用QSessionManager)
How to execute "confirm" dialog of gnome session manager from Qt application when logout gnome session (without using QSessionManager)
我正在CentOS6.3 上使用Qt4.8开发应用程序
通常,当我在运行应用程序时执行"注销"时,实际上,应用程序终止,会话注销。我该如何抑制这种情况并允许Gnome会话管理器确认终止,或者在由应用程序决定的处理终止之前不允许注销(和应用程序终止)。
对我来说,优先考虑如下
- 会话管理器询问会话结束
- 未执行注销处理(会话终止处理)直到在应用程序端退出
我尝试了以下操作,但没有达到预期的行为(阻止注销)。应用程序随着注销执行而终止。
- 捕获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来实现这一点,上面实用程序的来源应该能够为您提供指导。
相关文章:
- 如何在Qbutton的帮助下更改Q对话框的宽度
- 当对话框被接受时,如何用参数调用槽
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 如何多次询问来自QML对话框的输入?
- 选择文件对话框错误
- 自定义对话框(源自QDialog)不会关闭(Android)
- 如何在 MFC 对话框中使用 OnDraw
- 在C++中创建文件夹选取器对话框的最简单方法是什么?
- 从资源视图访问对话框时出现问题
- 如何检测窗口当前是否正在运行模式对话框?
- "最小化"按钮不会出现在 MFC 对话框中
- 如何获取QNetworkConfiguration UserChoice对话框?
- 表单显示对话框函数错误,并且不执行下面的语句
- 如何在 VC6 中的对话框中将图标设置为按钮
- C++/Win32 构造函数不使用从对话框获取的字符串初始化变量
- 在 Win32 应用中,如果未选择文件夹并且用户单击"确定",则文件夹选择对话框将关闭
- 在主窗口之前显示登录对话框并隐藏主窗口按钮
- 找不到没有具有类名 #32770 的窗口名称的父窗口的子窗口(对话框)
- 如何在主窗口标签的对话框中显示QLineEdit的输入
- 注销侏儒会话时如何从Qt应用程序执行"confirm" gnome会话管理器的对话框(不使用QSessionManager)