如何将Qt文件路径从资源转换为绝对路径?

时间:2017-05-09 22:27:27

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

我需要接收像

这样的绝对文件路径

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

来自QRC文件的路径

:/Data/ExperimentDefaults.xlsx

我该怎么做?

1 个答案:

答案 0 :(得分:1)

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

你愿意用这种文件路径做什么? QFile可以处理资源路径(":/...")并打开此类文件,但其他文件处理API不需要(例如C' fopen或C ++& #39; s 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)来避免这种情况,并在完成提取的文件后手动删除临时目录。