- class QFileSelector#
QFileSelector
提供了一种方便选择文件变体的方式。 更多…概要#
方法#
def
__init__()
def
allSelectors()
def
extraSelectors()
def
select()
注意
此文档可能包含自动从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()
将使用新的列表,并且可能返回不同。当多个选择器适用于同一文件时的冲突解决#
当多个选择器适用于同一文件时,将选择第一个匹配的选择器。选择器的检查顺序为
通过
setExtraSelectors()
设置的选择器,按列表中的顺序QT_FILE_SELECTORS
环境变量中的选择器,从左到右地区设置
平台
以下是一个同时匹配多个选择器的示例。它使用平台选择器,并设置了一个名为“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
。创建一个
QFileSelector
实例。此实例将具有与其他QFileSelector
实例相同的静态选择器,但拥有自己的额外选择器集合。如果提供,它将具有指定的
QObject
parent
。- allSelectors()#
- 返回类型:
字符串列表
返回此实例使用的完整、有序选择器列表
- extraSelectors()#
- 返回类型:
字符串列表
返回已通过编程添加到此实例的额外选择器列表。
另请参阅
- select(filePath)#
- 参数:
filePath – str
- 返回类型:
字符串
此函数基于运行时的条件返回选定的路径版本。如果没有可选择的文件,则返回原始的
。filePath
如果原始文件不存在,则返回原始的
filePath
。这意味着您必须有一个基本文件用作备用,您不能只有可选择子目录中的文件。查看类概述中的选择算法。
这是操作于
QUrl
对象的便捷版本。如果方案不是文件或qrc,则立即返回filePath
。否则,选择应用于filePath
的路径,并返回一个具有选定路径和其他与filePath
相同的QUrl
部分的QUrl
。查看类概述中的选择算法。
- setExtraSelectors(list)#
- 参数:
list – 字符串列表
设置已通过编程添加到此实例的额外选择器的字符串列表。
这些选择器比自动检索的任何选择器具有更高的优先级。
另请参阅