PySide6.QtGui.QSessionManager¶
- class QSessionManager¶
QSessionManager类提供了对会话管理器的访问。更多…概要¶
方法¶
def
cancel()def
discardCommand()def
isPhase2()def
release()def
requestPhase2()def
restartCommand()def
restartHint()def
sessionId()def
sessionKey()def
setRestartHint()
注意
本文档可能包含从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会话 管理- class RestartHint¶
此枚举类型定义了此应用程序希望由会话管理器重新启动的情况。当前值为:
常量
描述
QSessionManager.RestartIfRunning
如果应用程序在会话关闭时仍在运行,它希望在下一个会话开始时重新启动。
QSessionManager.RestartAnyway
应用程序希望在下一个会话开始时启动,无论如何。(这对于在启动后运行然后退出的实用程序非常有用。)
QSessionManager.RestartImmediately
应用程序希望在不运行时立即启动。
QSessionManager.RestartNever
应用程序不希望自动重启。
默认提示是
RestartIfRunning。
- allowsErrorInteraction()¶
- Return type:
布尔
如果允许错误交互,则返回
true;否则返回false。这与
allowsInteraction()类似,但还允许应用程序告知用户发生的任何错误。会话管理器可能会给予错误交互请求更高的优先级,这意味着错误交互更有可能被允许。然而,仍然不能保证会话管理器会允许交互。- allowsInteraction()¶
- Return type:
布尔
警告
本节包含从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()¶
- Return type:
字符串列表
返回当前设置的丢弃命令。
- isPhase2()¶
- Return type:
布尔
如果会话管理器当前正在执行第二个会话管理阶段,则返回
true;否则返回false。另请参阅
- release()¶
在交互阶段后释放会话管理器的交互信号量。
- requestPhase2()¶
请求应用程序的第二个会话管理阶段。然后,应用程序可以立即从
commitDataRequest()或QApplication::saveStateRequest()函数返回,一旦大多数或所有其他应用程序完成其会话管理,它们将再次被调用。这两个阶段对于像X11窗口管理器这样的应用程序非常有用,这些应用程序需要存储有关另一个应用程序窗口的信息,因此必须等待这些应用程序完成各自的会话管理任务。
- restartCommand()¶
- Return type:
字符串列表
返回当前设置的重新启动命令。
- restartHint()¶
- Return type:
返回应用程序当前的重新启动提示。默认是
RestartIfRunning。另请参阅
- sessionId()¶
- Return type:
字符串
返回当前会话的标识符。
如果应用程序是从较早的会话中恢复的,则此标识符与较早会话中的标识符相同。
另请参阅
- sessionKey()¶
- Return type:
字符串
返回当前会话中的会话密钥。
如果应用程序是从较早的会话中恢复的,此键与上一个会话结束时的键相同。
会话密钥在每次调用commitData()或saveState()时都会更改。
另请参阅
- setDiscardCommand(command)¶
- Parameters:
command – 字符串列表
将丢弃命令设置为给定的
command。- setManagerProperty(name, value)¶
- Parameters:
name – str
value – str
这是一个重载函数。
对应用程序的识别和状态记录的低级写访问权限保存在会话管理器中。
名为
name的属性将其值设置为字符串value。- setManagerProperty(name, value)
- Parameters:
name – str
value – 字符串列表
应用程序的识别和状态记录的低级写访问权限保存在会话管理器中。
名为
name的属性将其值设置为字符串列表value。- setRestartCommand(command)¶
- Parameters:
command – 字符串列表
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
如果会话管理器能够恢复会话,它将执行
command以恢复应用程序。命令默认为appname -session id
-session选项是强制性的;否则QGuiApplication无法判断它是否已被恢复或当前的会话标识符是什么。详情请参见isSessionRestored()和sessionId()。如果你的应用程序非常简单,可能可以将整个应用程序状态存储在额外的命令行选项中。这通常是一个非常糟糕的想法,因为命令行通常限制在几百字节以内。相反,为此目的使用QSettings、临时文件或数据库。通过使用唯一的
sessionId()标记数据,你将能够在未来的会话中恢复应用程序。- setRestartHint(hint)¶
- Parameters:
提示 –
RestartHint
将应用程序的重启提示设置为
hint。在应用程序启动时,提示设置为RestartIfRunning。注意
这些标志只是提示,会话管理器可能会也可能不会遵守它们。
我们建议在
saveStateRequest()中设置重启提示,因为大多数会话管理器在应用程序启动后不久会执行检查点。另请参阅