当前位置:   article > 正文

101-数据读写和文件管理-数据读写基本类-文件选择QFileSelector

qfileselector

文件选择QFileSelector

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

from PySide6.QtCore import QFileSelector

QFileSelector(parent: Union[PySide6.QtCore.QObject,NoneType] = None)-> None
  • 1
  • 2
  • 3
QFileSelector官方说明

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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

同样,如果您想根据目标平台选择不同的数据文件,您的代码可能如下所示:

    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)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

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

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

data/defaults.conf
data/+android/defaults.conf
data/+ios/+en_GB/defaults.conf
  • 1
  • 2
  • 3

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

images/background.png
images/+android/+en_GB/background.png
  • 1
  • 2

有了这些文件,您可以在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环境变量中的选择器,从左到右
  • Locale
  • Platform

下面是一个涉及同时匹配多个选择器的示例。它使用平台选择器,另外一个名为"admin"的额外选择器由应用程序根据用户凭据设置。对示例进行排序,以便在所有选择器都存在的情况下选择最低匹配的文件:

images/background.png
images/+linux/background.png
images/+windows/background.png
images/+admin/background.png
images/+admin/+linux/background.png
  • 1
  • 2
  • 3
  • 4
  • 5

因为在平台之前会检查额外的选择器,所以当设置了管理选择器时,在Windows上会选择+admin/background.png,而当没有设置管理选择器时在Windows上则会选择+Windows/background.php。在Linux上,当设置了admin时,将选择+admin/+Linux/background.png,而当没有设置admin时,则选择+Linux/bbackground.png。

QFileSelector方法
方法返回类型描述
allSelectors()list of strings返回此实例使用的选择器的完整有序列表
extraSelectors()list of strings返回以编程方式添加到此实例的额外选择器的列表。
select(filePath:str)str此函数根据运行时的条件返回选定版本的路径。如果不存在可选择的文件,则返回原始文件路径。
如果原始文件不存在,则返回原始文件路径。这意味着你必须有一个基本文件可以依靠,不能只有可选择的子目录中的文件。
有关选择算法,请参见类概述。
select(filePath:str)str此函数根据运行时的条件返回选定版本的路径。如果不存在可选择的文件,则返回原始文件路径。
如果原始文件不存在,则返回原始文件路径。这意味着你必须有一个基本文件可以依靠,不能只有可选择的子目录中的文件。
有关选择算法,请参见类概述。
setExtraSelectors(list:List[str]设置已通过编程方式添加到此实例的额外选择器的列表。
这些选择器的优先级高于任何已自动拾取的选择器。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/114980
推荐阅读
相关标签
  

闽ICP备14008679号