Qt从Resources Bundle Directory读取文件

时间:2017-03-06 01:16:22

标签: c++ macos qt cmake

我有一个Qt程序,里面有一些.txt文件。一开始我只是从我制作的某个目录中读取它们,但时机已到,并且有必要为Mac OSX创建一个包。在cmake的帮助下,我设法将.txt文件放在/ bundle的.app目录下,但是我没有找到如何从那里读取它们。

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

1 个答案:

答案 0 :(得分:5)

正如@MrEricSir所指出的,最好使用Qt resource system和本地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
}

此示例代码假定:

  • Windows 上,您将资源存储在与可执行文件相同的目录中。
  • macOS 上,您将资源存储在Resources捆绑包的.app目录中。根据{{​​3}},可执行文件存储在yourapplication.app/Contents/MacOS目录中,资源文件通常存储在yourapplication.app/Contents/Resources中。代码只是相对于您的可执行文件传到Resources目录。
  • Linux 上,您正在使用标准的Linux目录结构,使用单独的binshare目录。当然,您可以使用opt目录或根本不捆绑您的应用程序 - 在这种情况下,您不需要任何针对Linux的条件包含。有关Linux Apple developer docs
  • 的更多信息,请参阅