class QFileSelector#

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

Inheritance diagram of 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 会查找基础文件所在的相同目录。如果存在任何形式为 +<selector> 且处于活动状态的选择器目录,则 QFileSelector 将偏好此目录中的具有相同文件名的文件,而不是基础文件。这些目录可以嵌套以针对多个选择器进行检查,例如

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

有了这些文件,您就可以在 Android 平台上选择不同的文件,但前提是地区是 en_GB。

在没有任何有效的选择器的情况下,推荐在基础文件位置具有默认文件或错误处理文件,即使您预计所有部署将存在选择器。

在未来的版本中,一些可能被标记为部署时间静态,并在部署步骤中作为优化而移动。由于选择器具有性能成本,推荐在涉及性能关键代码的情况下避免使用它们。

添加选择器#

通常可用的选择器有

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

  • 地区,与 QLocale().name() 相同。

额外的选择器将添加到 QT_FILE_SELECTORS 环境变量中,如果设置,应是一组以逗号分隔的选择器。请注意,此变量只会读取一次;如果变量在应用程序运行时发生变化,则选择器可能不会更新。初始选择器集只在首次使用时评估。

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

当多个选择器适用于同一文件时的冲突解决#

当多个选择器适用于同一文件时,将选择第一个匹配的选择器。选择器的检查顺序为

  1. 通过setExtraSelectors()设置的选择器,按列表中的顺序

  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

因为额外的选择器在平台之前进行检查,所以在设置了admin选择器的情况下,Windows将选择+admin/background.png,而在没有设置admin选择器的情况下,Windows将选择+windows/background.png。在Linux上,当设置admin时,将选择+admin/+linux/background.png,而未设置admin时,将选择+linux/background.png

__init__([parent=None])#
参数:

parentQObject

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

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

allSelectors()#
返回类型:

字符串列表

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

extraSelectors()#
返回类型:

字符串列表

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

另请参阅

setExtraSelectors()

select(filePath)#
参数:

filePath – str

返回类型:

字符串

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

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

查看类概述中的选择算法。

select(filePath)
参数:

filePathQUrl

返回类型:

QUrl

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

查看类概述中的选择算法。

setExtraSelectors(list)#
参数:

list – 字符串列表

设置已通过编程添加到此实例的额外选择器的字符串列表。

这些选择器比自动检索的任何选择器具有更高的优先级。

另请参阅

extraSelectors()