C++ Qt从资源包目录读取文件
我有一个Qt程序,里面有一些.txt文件。起初,我只是从我制作的一些目录中读取它们,但时间已经到了,有必要为MacOSX创建一个捆绑包。在cmake的帮助下,我设法将.txt文件放在bundle的.app目录中的/Resources中,但我没有找到如何从那里读取它们C++ Qt从资源包目录读取文件,c++,macos,qt,cmake,C++,Macos,Qt,Cmake,我有一个Qt程序,里面有一些.txt文件。起初,我只是从我制作的一些目录中读取它们,但时间已经到了,有必要为MacOSX创建一个捆绑包。在cmake的帮助下,我设法将.txt文件放在bundle的.app目录中的/Resources中,但我没有找到如何从那里读取它们 我如何读取这些文件,以便在任何地方运行该应用程序 正如@MrEricSir所指出的,最好将与本机Qt类一起使用,通过流读取文件 但是,如果您仍然需要将数据存储在单独的文件中,您可以简单地使用返回可执行文件路径的方法,并将其包装到您自
我如何读取这些文件,以便在任何地方运行该应用程序 正如@MrEricSir所指出的,最好将与本机Qt类一起使用,通过流读取文件 但是,如果您仍然需要将数据存储在单独的文件中,您可以简单地使用返回可执行文件路径的方法,并将其包装到您自己的函数中,以尊重不同平台上的应用程序结构 例如:
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上,您将资源存储在
捆绑包的.app
目录中。根据,可执行文件存储在resources
目录中,资源文件通常存储在yourapplication.app/Contents/MacOS
中。代码只是相对于可执行文件移动到yourapplication.app/Contents/Resources
目录资源
- 在Linux上,您使用的是标准的Linux目录结构,使用的是单独的
和bin
目录。当然,您可以使用share
目录,或者根本不捆绑您的应用程序——在这种情况下,Linux不需要任何条件包含。有关Linux的更多信息,请阅读opt
ifstream
不知道如何读取Qt的内部格式,但是相应的Qt文件管理类肯定会这样做,例如QFile
,QTextStream
,等等。谢谢。但似乎你不能用#elif来做,它只对每个返回使用单独的#ifndef,就像上面所说的那样@fminkin编辑了代码,谢谢你指出。#elif defined
指令应该有效。谢谢。但是,如何在Qt项目中包含这些文件,并指示构建系统将它们放置在每个平台的适当位置?稍后使用QStandardPath很容易找到目录,但是在安装应用程序时如何将文件部署到目录中?@Oscar您可以使用,或者为此。感谢您提供的信息。确定文件在每个平台上的最终位置似乎有点麻烦,但我想这是不可避免的。