- class QSessionManager#
QSessionManager
类提供了对会话管理器的访问。更多…摘要#
方法#
def
cancel()
def
discardCommand()
def
isPhase2()
def
release()
def
requestPhase2()
def
restartCommand()
def
restartHint()
def
sessionId()
def
sessionKey()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译存在问题,也可以通过在https:/bugreports.qt.io/projects/PYSIDE上创建工单的方式告诉我们
详细描述#
桌面环境中的会话管理器(Qt GUI应用程序所在的)会跟踪会话,会话是一组运行的应用程序集合,每个应用程序都有其特定的状态。应用程序的状态包含(最显著的是)应用程序打开的文档和其窗口的位置和大小。
会话管理器用于保存会话,例如在关闭计算机时,以及恢复会话,例如在启动计算机时。我们建议您使用QSettings保存应用程序设置,例如窗口位置、最近使用的文件等。当会话管理器重新启动应用程序时,可以恢复设置。
QSessionManager
提供应用程序与平台会话管理器之间的接口。在Qt中,会话管理请求通过两个信号commitDataRequest()
和saveStateRequest()
处理。两个信号都提供了一个QSessionManager
对象的引用作为参数。会话管理器只能通过由这些信号触发的槽访问。除非应用程序从会话管理器获得明确的许可,否则不可能进行用户交互。您可以通过调用
allowsInteraction()
请求许可,或者在绝对必要的情况下,调用allowsErrorInteraction()
。Qt不会强制执行这一规定,但会话管理器可能会。您可以通过调用
cancel()
尝试中止关机过程。对于Unix/X11上提供的复杂会话管理器,
QSessionManager
提供了进一步的特性,以微调应用程序的会话管理行为:setRestartCommand()
,setDiscardCommand()
,setRestartHint()
,setProperty()
,requestPhase2()
。有关更多细节,请参阅相应的函数描述。另请参阅
QGuiApplication
会话管理
- 类 RestartHint#
此枚举类型定义了在哪些情况下,会话管理器希望重启此应用程序。当前值包括
常量
描述
QSessionManager.RestartIfRunning
如果会话关闭时应用程序仍在运行,则希望在下一个会话的开始时重启。
QSessionManager.RestartAnyway
无论情况如何,应用程序希望在下一个会话的开始时启动。(这对于启动后立即运行然后退出的实用程序很有用。)
QSessionManager.RestartImmediately
当应用程序未运行时,希望立即启动。
QSessionManager.RestartNever
应用程序不希望自动重启。
默认提示为
RestartIfRunning
。
- allowsErrorInteraction()#
- 返回类型::
bool
如果允许错误交互,则返回
true
;否则返回false
。这类似于
allowsInteraction()
,但还允许应用程序告知用户发生的任何错误。会话管理器可能会给予错误交互请求更高的优先级,这意味着允许错误交互的可能性更大。但是,仍然不能保证会话管理器会允许交互。- allowsInteraction()#
- 返回类型::
bool
警告
本节包含自动从C++翻译到Python的代码段,可能包含错误。
请求会话管理器允许与用户交互。如果允许交互,则返回true;否则返回
false
。此机制背后的原理是在关闭期间同步用户交互。高级会话管理器可以同时要求所有应用程序提交数据,从而实现更快的关闭。
当交互完成后,我们强烈建议通过调用
release()
释放用户交互信号量。这样,其他应用程序就有机会在您的应用程序仍在忙于保存数据时与用户交互。(当应用程序退出时,信号量会被隐式释放。)如果用户在交互阶段决定取消关闭过程,您必须通过调用
cancel()
通知会话管理器。以下是一个示例,说明了如何实现应用程序的
commitDataRequest()
:def __init__(self, parent): super().__init__(parent) qApp.commitDataRequest.connect( self.commitData) def commitData(self, manager): if manager.allowsInteraction(): ret = QMessageBox.warning(() mainWindow, tr("My Application"), tr("Save changes to document?"), QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel) if ret == QMessageBox.Save: manager.release() if not saveDocument(): manager.cancel() break elif ret == QMessageBox.Discard: break elif ret == QMessageBox.Cancel: else: manager.cancel() else: # we did not get permission to interact, then # do something reasonable instead
如果在保存数据时应用程序内部发生错误,您可能想尝试使用
allowsErrorInteraction()
代替。- cancel()#
告诉会话管理器取消关闭过程。应用程序在征求用户意见之前不应调用此函数。
- discardCommand()#
- 返回类型::
字符串列表
返回当前设置的弃用命令。
- isPhase2()#
- 返回类型::
bool
如果会话管理器当前正在执行第二个会话管理阶段,则返回
true
;否则返回false
。另请参阅
- release()#
在交互阶段后释放会话管理器的交互信号量。
- requestPhase2()#
请求应用程序的第二个会话管理阶段。应用程序可以立即从
commitDataRequest
或QApplication::saveStateRequest()函数返回,一旦大多数或所有其他应用程序完成了他们的会话管理,它们将再次被调用。两个阶段对于需要存储另一个应用程序窗口信息的应用程序(例如X11窗口管理器)非常有用,因此它们必须等待这些应用程序完成各自的会话管理任务。
- restartCommand()#
- 返回类型::
字符串列表
返回当前设置的重启命令。
- restartHint()#
- 返回类型::
返回应用程序当前的重启提示。默认值为
RestartIfRunning
。另请参阅
- sessionId()#
- 返回类型::
str
返回当前会话的标识符。
如果应用程序已从前一个会话恢复,则此标识符与前一个会话相同。
另请参阅
- sessionKey()#
- 返回类型::
str
返回当前会话中的会话键。
如果应用程序已从前一个会话恢复,则此键与前一个会话结束时相同。
会话键在每次调用commitData()或saveState()时都会更改。
另请参阅
- setDiscardCommand(arg__1)#
- 参数:
arg__1 – 字符串列表
将销毁命令设置为给定的
command
。-
setManagerProperty
(name, value)# - 参数:
name - 字符串
value - 字符串
这是一个重载函数。
在会话管理器中保留对应用程序标识和状态记录的低级别写入访问。
将名为
name
的属性值设置为字符串value
。-
setManagerProperty
(name, value) - 参数:
name - 字符串
value - 字符串列表
在会话管理器中保留对应用程序标识和状态记录的低级别写入访问。
将名为
name
的属性值设置为字符串列表value
。-
setRestartCommand
(arg__1)# - 参数:
arg__1 – 字符串列表
警告
本节包含自动从C++翻译到Python的代码段,可能包含错误。
如果会话管理器能够恢复会话,则将执行
command
以恢复应用程序。默认的命令为appname -session id
必须使用
-session
选项;否则QGuiApplication
无法判断它是否已恢复或当前会话标识是什么。请参阅isSessionRestored()
和sessionId()
以获取详细信息。如果您的应用程序非常简单,可能将整个应用程序状态存储在额外的命令行选项中。这通常是一个非常糟糕的想法,因为命令行通常限制为几个字节的容量。相反,请使用 QSettings、临时文件或数据库进行此操作。通过使用独特的
sessionId()
标记数据,您将能够在未来会话中恢复应用程序。- setRestartHint(arg__1)#
- 参数:
arg__1 –
RestartHint
设置应用程序的重启提示为
hint
。在应用程序启动时,提示设置为RestartIfRunning
。注意
这些标志仅作为提示,会话管理器可能会尊重它们,也可能不会。
我们建议在
saveStateRequest()
中设置重启提示,因为大多数会话管理器都会在应用程序启动后不久执行一个检查点。另请参阅