如何在代码中引用资源文件夹 我正在把一个C++ QT应用程序从Windows移植到OSX,不能把我的头绕在.app捆绑概念上。我希望有人能帮我理解
我的可执行文件位于此处:MyProgram.app/Content/MacOS/MyProgram.exe 我的资源文件夹位于此处:MyProgram.app/Content/Resources/ 在我的代码中,我使用相对路径引用资源文件夹中的项目: “./Resources/something.png” 如果我打开.app包并直接运行.exe,这将非常有效 但这不是.app捆绑包的工作方式。用户应该单击Finder中的.app包来运行程序。但在这种情况下,我的相对路径不再有效,这就是我不理解的如何在代码中引用资源文件夹 我正在把一个C++ QT应用程序从Windows移植到OSX,不能把我的头绕在.app捆绑概念上。我希望有人能帮我理解,c++,macos,qt,bundle,C++,Macos,Qt,Bundle,我的可执行文件位于此处:MyProgram.app/Content/MacOS/MyProgram.exe 我的资源文件夹位于此处:MyProgram.app/Content/Resources/ 在我的代码中,我使用相对路径引用资源文件夹中的项目: “./Resources/something.png” 如果我打开.app包并直接运行.exe,这将非常有效 但这不是.app捆绑包的工作方式。用户应该单击Finder中的.app包来运行程序。但在这种情况下,我的相对路径不再有效,这就是我不理解的
有人了解我的问题以及我如何解决它吗?在编译产品时,您是否尝试过将
资源的路径设置为相对路径?否则,您可以检索主捆绑包及其应用程序的URL,并将其附加到资源URL。
似乎每件事都有一本手册:)
我们使用:
QDir
CoreDir::bundle()
{
// Trolltech provided example
CFURLRef appUrlRef = CFBundleCopyBundleURL( CFBundleGetMainBundle() );
CFStringRef macPath = CFURLCopyFileSystemPath( appUrlRef, kCFURLPOSIXPathStyle );
QString path = CFStringToQString( macPath );
CFRelease(appUrlRef);
CFRelease(macPath);
return QDir( path );
}
CoreDir::bundle().filePath(“../Resources”) 我最喜欢这个解决方案,因为它不依赖于特定于平台的代码。谢谢或QCoreApplication::applicationDirPath()-适用于非基于gui的Qt应用程序。不幸的是,您的链接失效,我在apple.com上找不到具有此标题的页面。谢谢,在更新的指南中将其更新为基本相似的内容。
QDir
CoreDir::bundle()
{
// Trolltech provided example
CFURLRef appUrlRef = CFBundleCopyBundleURL( CFBundleGetMainBundle() );
CFStringRef macPath = CFURLCopyFileSystemPath( appUrlRef, kCFURLPOSIXPathStyle );
QString path = CFStringToQString( macPath );
CFRelease(appUrlRef);
CFRelease(macPath);
return QDir( path );
}