class QSessionManager#

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

Inheritance diagram of 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 会话管理

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

另请参阅

requestPhase2()

release()#

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

requestPhase2()#

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

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

注意

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

另请参阅

isPhase2()

restartCommand()#
返回类型::

字符串列表

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

restartHint()#
返回类型::

RestartHint

返回应用程序当前的重启提示。默认值为RestartIfRunning

另请参阅

setRestartHint()

sessionId()#
返回类型::

str

返回当前会话的标识符。

如果应用程序已从前一个会话恢复,则此标识符与前一个会话相同。

另请参阅

sessionKey sessionId

sessionKey()#
返回类型::

str

返回当前会话中的会话键。

如果应用程序已从前一个会话恢复,则此键与前一个会话结束时相同。

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

另请参阅

sessionId sessionKey

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__1RestartHint

设置应用程序的重启提示为 hint。在应用程序启动时,提示设置为 RestartIfRunning

注意

这些标志仅作为提示,会话管理器可能会尊重它们,也可能不会。

我们建议在 saveStateRequest() 中设置重启提示,因为大多数会话管理器都会在应用程序启动后不久执行一个检查点。

另请参阅

restartHint()