QT核心编程之会话管理 (6)

移动开发
会话管理器为用户发出命令给它的客户。这些命令会使客户提交没有保存的变化(如:保存打开的文件),使客户为将来的会话保存状态或关机。这样的一些操作被称为会话管理。

QT核心编程之会话管理是本节介绍的内容,QT核心编程我们要分几个部分来介绍,想参考更多内容,请看末尾的编辑推荐进行详细阅读,先来看本篇内容。

一个会话是一组正在运行的应用程序,它们每个都一个特殊的状态。会话被一个称为会话管理器(Session manager)的服务程序来控制。在会话里每个参与的应用程序被称为会话客户。会话管理器为用户发出命令给它的客户。这些命令会使客户提交没有保存的变化(如:保存打开的文件),使客户为将来的会话保存状态或关机。这样的一些操作被称为会话管理

通常情况下,一个会话由用户在其桌面上同时运行的所有应用程序组成。在Unix/X11下,一个会话可能包括运行在不同计算机和多个显示器上的应用程序。

1、会话管理

(1)关闭一个会话

一个会话可以被会话管理器关闭,通常在用户logout时为用户关闭的。一个系统可以在紧急情况下执行自动关闭,例如:在掉电时。正常关机和掉电关机有很大的不同,在正常关机时,用户可能想与应用程序交互,并确定哪些文件应该保存,哪些应该删除。在掉电关机时,没有时间进行交互,甚至于用户不在现场。

(2)不同平台上的协议和支持

Mac OS X和MS-Windows对应用程序还没有完全的会话管理,如:没法恢复以前的会话。它们支持正常的logout,在得到用户确认后,应用程序有机会取消进程。这是与QApplication::comm.itData()方法相对应的功能。X11自从X11R6后,支持完整的会话管理。

(3)让会话管理与Qt一起工作

通过重载QApplication::comm.itData()来使用你的应用程序参加正常的logout处理。如果你仅应用在MS-Windows平台上,就只能提供这个重载了。你的应用程序***提供一个如图5的程序关闭对话框。

QT核心编程之会话管理

图5 程序关闭对话框

对于完全的会话管理(目前仅X11R6),你还应该关心应用程序的状态存储和下一个会话生命周期恢复状态。

2、测试和调试会话管理

在Mac OS X和Windows上的会话管理支持由于这些操作系统本身的这种功能的缺乏而受到限制。为了简单地关闭会话并验证你的应用程序是否如期望的那样执行,你***启动一个其它的应用程序。这个应用程序将随后得到关闭消息,这样允许你取消关闭。

在Unix上你能使用一个支持标准的X11R6会话管理,或使用X联盟提供的会话管理器xsm。xsm是标准X11R6安装的一部分。它是一个具有图形界面的会话管理器,你可能用它来管理会话。

下面是使用xsm的一个简单的方法:

(1)运行X11R6.

(2)在你的home目录下将创建仅包含下面一行的.xsmstartup文件:

  1. xterm  

这将告诉xsm的default/failsafe(缺省/失败安全)会话仅有xterm。否则,xsm将尝试触发包括窗口管理器twm在内多个客户,这没有什么用途。

(3)现在从另一个终端窗口启动xsm。一个会话管理器和xterm将出现。xterm有一个其它的shell没有的属性:在xterm的shell里,SESSION_MANAGER环境变量指向了你刚启动的会话管理器。

(4)在新的xterm窗口中启动你的应用程序,应用程序将自动连接它到会话管理器。你能使用ClientList按钮检查连接是否成功。

注意:当你启动或关闭会话管理的客户时,不要保护ClientList为打开状态。否则,xsm可能崩溃。

(5)使用会话管理器的Checkpoint和Shutdown按钮的不同设置检查你的应用程序执行行为。本地保存类型表示客户端应该保存它们的状态。它对应着QApplication::saveState()函数。全局保存类型请求应用程序保存它们没存储的变化到***的全局可访问的存储中。它触发QApplication::commitData()。

(6)在用户桌面上xsm是一个有用的会话管理器。作为一个测试环境它是稳定的而有用的。

小结:QT核心编程之会话管理的内容介绍完了,希望本既然内容对你有所帮助,更多资料参考在下面的编辑推荐。

【编辑推荐】

 QT核心编程之Qt模板库(1)

QT核心编程之集合类 (2)

QT核心编程之Qt线程 (3)

QT核心编程之鼠标拖放 (4)

QT核心编程之键盘焦点 (5)

QT核心编程之调试技术 (7)

 

责任编辑:zhaolei 来源: 互联网
相关推荐

2011-06-22 10:12:08

Qt 线程

2011-06-22 09:40:32

QT 模板库 模板

2011-06-22 09:58:04

QT 集合类

2011-06-22 10:27:32

QT 键盘 焦点

2011-06-22 10:20:11

QT 鼠标 拖放

2011-06-22 10:45:21

QT 调试

2011-06-17 15:19:28

Qt

2012-10-29 13:25:54

JavaScriptJSjQuery

2015-04-24 09:48:59

TCPsocketsocket编程

2014-12-16 09:10:52

IPv4IPv6TCP

2017-02-07 18:34:16

Linux编程PING

2022-02-14 15:07:48

进程FileChanne线程

2011-07-21 10:17:53

java

2009-07-08 15:10:00

Servlet会话管理

2011-06-24 15:30:22

QT 皮肤 QSS

2011-06-13 16:51:19

Qt Socket

2011-06-10 12:44:09

2011-06-22 16:08:40

Qt 多线程 事件循环

2020-12-04 19:28:53

CountDownLaPhaserCyclicBarri

2011-05-27 15:56:30

Android
点赞
收藏

51CTO技术栈公众号