Qt从资源包目录中读取文件

fmi*_*kin 2 c++ macos qt cmake

我有一个Qt程序,里面有一些.txt文件。一开始,我只是从我创建的某个目录中读取它们,但是时间已经到了,因此有必要为Mac OSX创建捆绑软件。我在cmake的帮助下将.txt文件放入包的.app目录中的/ Resources内,但是我没有找到如何从那里读取它们的方法。

如何读取这些文件,以便可以在任何地方运行该应用程序?

kef*_*500 5

正如@MrEricSir指出的,最好将Qt资源系统与本机Qt类一起使用,以通过流读取文件。

但是,如果仍然需要将数据存储在单独的文件中,则可以简单地使用QCoreApplication::applicationDirPath()将可执行文件的路径返回并将其包装到您自己的函数中的方法,以尊重不同平台上的应用程序结构。

例如:

QString getResourcesPath()
{
#if defined(Q_OS_WIN)
    return QApplication::applicationDirPath() + "/";
#elif defined(Q_OS_OSX)
    return QApplication::applicationDirPath() + "/../Resources/";
#elif defined(Q_OS_LINUX)
    return QApplication::applicationDirPath() + "/../share/yourapplication/";
#else
    return QApplication::applicationDirPath() + "/";
#endif
}
Run Code Online (Sandbox Code Playgroud)

此示例代码假定:

  • Windows上,您将资源存储在与可执行文件相同的目录中。
  • macOS上,您将资源存储在包的Resources目录中.app。根据Apple开发人员文档,可执行文件存储在yourapplication.app/Contents/MacOS目录中,资源文件通常存储在目录中yourapplication.app/Contents/Resources。代码只是Resources相对于您的可执行文件移动到目录。
  • Linux上,您使用的是标准Linux目录结构,该目录结构使用了sep binshare目录。当然,您可以使用opt目录,也可以完全不捆绑应用程序-在这种情况下,Linux不需要任何条件包含。有关更多信息,请阅读有关Linux Filesystem Hierarchy Standard的信息