Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在代码中引用资源文件夹 我正在把一个C++ QT应用程序从Windows移植到OSX,不能把我的头绕在.app捆绑概念上。我希望有人能帮我理解_C++_Macos_Qt_Bundle - Fatal编程技术网

如何在代码中引用资源文件夹 我正在把一个C++ QT应用程序从Windows移植到OSX,不能把我的头绕在.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包来运行程序。但在这种情况下,我的相对路径不再有效,这就是我不理解的

我的可执行文件位于此处: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 );
}