PySide6.QtGui.QSessionManager

class QSessionManager

QSessionManager 类提供了对会话管理器的访问。更多

PySide6.QtGui.QSessionManager 的继承图

概要

方法

注意

本文档可能包含从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

另请参阅

requestPhase2()

release()

在交互阶段后释放会话管理器的交互信号量。

requestPhase2()

请求应用程序的第二个会话管理阶段。然后,应用程序可以立即从commitDataRequest()或QApplication::saveStateRequest()函数返回,一旦大多数或所有其他应用程序完成其会话管理,它们将再次被调用。

这两个阶段对于像X11窗口管理器这样的应用程序非常有用,这些应用程序需要存储有关另一个应用程序窗口的信息,因此必须等待这些应用程序完成各自的会话管理任务。

注意

如果另一个应用程序请求了第二阶段,它可能会在你的应用程序的第二阶段之前、同时或之后被调用。

另请参阅

isPhase2()

restartCommand()
Return type:

字符串列表

返回当前设置的重新启动命令。

restartHint()
Return type:

RestartHint

返回应用程序当前的重新启动提示。默认是 RestartIfRunning

另请参阅

setRestartHint()

sessionId()
Return type:

字符串

返回当前会话的标识符。

如果应用程序是从较早的会话中恢复的,则此标识符与较早会话中的标识符相同。

另请参阅

sessionKey() sessionId()

sessionKey()
Return type:

字符串

返回当前会话中的会话密钥。

如果应用程序是从较早的会话中恢复的,此键与上一个会话结束时的键相同。

会话密钥在每次调用commitData()或saveState()时都会更改。

另请参阅

sessionId() sessionKey()

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()中设置重启提示,因为大多数会话管理器在应用程序启动后不久会执行检查点。

另请参阅

restartHint()