PySide6.QtCore.QFileSelector

class QFileSelector

QFileSelector 提供了一种选择文件变体的便捷方式。更多

PySide6.QtCore.QFileSelector 的继承图

概要

方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

QFileSelector 是一种基于平台或设备特性选择文件变体的便利工具。这使您在某些情况下更容易开发和部署包含所有不同变体的单一代码库,例如在部署步骤中无法确定正确变体时。

使用QFileSelector

如果你总是使用相同的文件,你不需要使用 QFileSelector

考虑以下示例用法,您可能希望在不同的地区使用不同的设置文件。您可能会像这样在不同地区之间选择代码:

defaultsBasePath = "data/"
defaultsPath = defaultsBasePath + "defaults.conf"
localizedPath = defaultsBasePath
        + QString("%1/defaults.conf").arg(QLocale().name())
if QFile.exists(localizedPath):
    defaultsPath = localizedPath
defaults = QFile(defaultsPath)

同样地,如果你想根据目标平台选择不同的数据文件,你的代码可能看起来像这样:

    defaultsPath = "data/defaults.conf"
#if defined(Q_OS_ANDROID)
    defaultsPath = "data/android/defaults.conf"
#elif defined(Q_OS_IOS)
    defaultsPath = "data/ios/defaults.conf"
#endif
    defaults = QFile(defaultsPath)

QFileSelector 提供了一种方便的替代方案,避免了编写此类样板代码,并且在后者情况下,它允许您开始使用特定于平台的配置而无需重新编译。QFileSelector 还允许以方便的方式链接多个选择器,例如仅在特定平台和区域设置的组合上选择不同的文件。例如,要根据平台和/或区域设置进行选择,代码如下:

selector = QFileSelector()
defaultsFile = QFile(selector.select("data/defaults.conf"))

要选择的文件放置在以'+'和选择器名称命名的目录中。在上面的示例中,您可以通过将它们放置在以下位置来选择平台配置:

data/defaults.conf
data/+android/defaults.conf
data/+ios/+en_GB/defaults.conf

要查找选定的文件,QFileSelector 会在与基础文件相同的目录中查找。如果有任何形式为 + 的目录并且有活动的选择器,QFileSelector 会优先选择该目录中具有相同文件名的文件,而不是基础文件。这些目录可以嵌套以检查多个选择器,例如:

images/background.png
images/+android/+en_GB/background.png

有了这些文件后,你会在安卓平台上选择一个不同的文件,但仅当地区设置为en_GB时。

为了在没有有效选择器的情况下进行错误处理,建议在基础文件位置放置一个默认或错误处理文件,即使您期望所有部署都存在选择器。

在未来的版本中,某些内容可能会被标记为部署时静态内容,并在部署步骤中作为优化进行移动。由于选择器会带来性能成本,建议在涉及性能关键代码的情况下避免使用它们。

添加选择器

通常可用的选择器有

  • 平台,以下任意一个字符串,与应用程序运行的平台匹配(列表不全面):android、ios、osx、darwin、mac、macos、linux、qnx、unix、windows。在Linux上,如果可以确定,还会包括发行版的名称,如debian、fedora或opensuse。

  • locale,与 QLocale().name() 相同。

进一步的选取器将从QT_FILE_SELECTORS环境变量中添加,该变量设置时应为一组逗号分隔的选取器。请注意,此变量只会被读取一次;如果应用程序运行时变量发生变化,选取器可能不会更新。初始的选取器集合仅在首次使用时评估一次。

您还可以在运行时添加额外的选择器以实现自定义行为。这些选择器将在未来调用select()时使用。如果额外选择器列表已更改,调用select()时将使用新列表,并可能返回不同的结果。

当多个选择器适用时的冲突解决

当多个选择器可以应用于同一个文件时,将选择第一个匹配的选择器。选择器的检查顺序如下:

  1. 通过setExtraSelectors()设置的Selectors,按照它们在列表中的顺序

  2. 从环境变量 QT_FILE_SELECTORS 中选择器,从左到右

  3. 区域设置

  4. 平台

这里有一个涉及多个选择器同时匹配的示例。它使用了平台选择器,并且应用程序根据用户凭据设置了一个名为“admin”的额外选择器。该示例经过排序,以便在所有选择器都存在的情况下选择最低匹配的文件:

images/background.png
images/+linux/background.png
images/+windows/background.png
images/+admin/background.png
images/+admin/+linux/background.png

因为额外的选择器在平台之前被检查,当管理员选择器设置时,在Windows上将选择+admin/background.png,而当管理员选择器未设置时,在Windows上将选择+windows/background.png。在Linux上,当管理员设置时,将选择+admin/+linux/background.png,而当未设置时,将选择+linux/background.png

__init__([parent=None])
Parameters:

父对象QObject

创建一个QFileSelector实例。此实例将与其他QFileSelector实例具有相同的静态选择器,但拥有自己的一组额外选择器。

如果提供,它将具有给定的 QObject parent

allSelectors()
Return type:

字符串列表

返回此实例使用的选择器的完整有序列表

extraSelectors()
Return type:

字符串列表

返回已通过编程方式添加到此实例的额外选择器列表。

另请参阅

setExtraSelectors()

select(filePath)
Parameters:

filePath – str

Return type:

字符串

此函数根据运行时的条件返回所选路径的版本。如果没有可选择的文件,则返回原始的 filePath

如果原始文件不存在,则返回原始的 filePath。这意味着你必须有一个基础文件作为后备,你不能只有可选择的子目录中的文件。

请参阅选择算法的类概述。

select(filePath)
Parameters:

filePathQUrl

Return type:

QUrl

这是对QUrl对象进行操作的便捷版本。如果方案不是文件或qrc,则立即返回filePath。否则,选择将应用于filePath的路径,并返回一个QUrl,其路径为所选路径,其他QUrl部分与filePath相同。

请参阅选择算法的类概述。

setExtraSelectors(list)
Parameters:

list – 字符串列表

设置已通过编程方式添加到此实例的额外选择器的list

这些选择器优先于任何自动选择的选择器。

另请参阅

extraSelectors()