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



我需要接收绝对文件路径,例如

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

从QRC文件的路径,如

:/Data/ExperimentDefaults.xlsx.

我该怎么做?

资源全部打包到 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被销毁时,临时目录也会被删除,因此您的文件也会被删除。您可以通过禁用自动删除功能来避免这种情况:tempDir.setAutoRemove(false)并在完成提取的文件后手动删除临时目录。

最新更新