【问题标题】:How to convert Qt file path from resource to absolute path?如何将 Qt 文件路径从资源转换为绝对路径?
【发布时间】:2017-10-08 09:56:30
【问题描述】:

我需要接收绝对文件路径

C:/Users/Dima/YandexDisk/_Application/WeldAnalysis/ExperimentDefaults.xlsx

来自QRC文件的路径

:/Data/ExperimentDefaults.xlsx.

我该怎么做?

【问题讨论】:

标签: c++ windows qt path qt-resource


【解决方案1】:

资源全部打包到 QRC 文件中,它们不暴露给文件系统,因此无法转换为标准路径;这就像访问 zip 文件中的文件。

你愿意用这样的文件路径做什么? QFile 可以处理资源路径 (":/...") 并打开此类文件,但其他文件处理 API 不能(例如 C 的 fopen 或 C++ 的 std::ifstream)。此外,出于同样的原因,如果作为参数传递,非 Qt 应用程序将无法打开此类文件。

您拥有的选项包括:

  • 使用 QFile 打开文件并使用相关的 Qt 类读取它(假设你正在处理一个 Excel 文件,我认为这不值得,除非你有一些库可以从内存中读取它缓冲区)。

  • 将文件从资源容器复制到一个临时目录(您可以使用QTemporaryDir 创建一个),然后从那里使用该文件:

    QTemporaryDir tempDir;
    if (tempDir.isValid()) {
      const QString tempFile = tempDir.path() + "/yourfile.xlsx";
      if (QFile::copy(":/yourfile.xlsx", tempFile)) {
        // your file is now extracted to the filesystem
      }
    }
    

请注意,当tempDir 被销毁时,临时目录也会被删除,因此您的文件也会被删除。您可以通过禁用 auto-remove 功能来避免这种情况:tempDir.setAutoRemove(false) 并在完成提取文件后手动删除临时目录。

【讨论】:

    猜你喜欢
    • 2021-10-18
    • 2016-12-11
    • 2014-01-28
    • 2019-08-20
    • 2017-08-01
    • 2011-11-07
    • 2011-05-02
    相关资源
    最近更新 更多