Qt文档“Mac Differences”页面提供了以下用于访问应用程序包路径的代码:
CFURLRef appUrlRef = CFBundleCopyBundleURL(CFBundleGetMainBundle());
CFStringRef macPath = CFURLCopyFileSystemPath(appUrlRef, kCFURLPOSIXPathStyle);
const char *pathPtr = CFStringGetCStringPtr(macPath,CFStringGetSystemEncoding());
qDebug("Path = %s", pathPtr);
CFRelease(appUrlRef);
CFRelease(macPath);
然而,这比简单的东西更有优势,如下所示:
QDir dir = QDir(QCoreApplication::applicationDirPath());
dir.cdUp();
dir.cdUp();
return dir;
答案 0 :(得分:3)
永远不要使用第一个代码。正如在那里的Qt文档中所写,它可能在非英语环境中不起作用,因为文件名编码不是CFStringGetSystemEncoding()
,它返回用户的主要非unicode编码。相反,文件名始终由UTF8编码(略有变化。)
const char *pathPtr = CFStringGetCStringPtr(macPath, kCFStringEncodingUTF8);
更准确地说,您需要使用CFStringGetFileSystemRepresentation
。
QCoreApplication::applicationDirPath()
(大多数情况下)正确地考虑了这些细微之处,因此如果您希望自己的应用在非英语Mac上运行,则应使用后一种方法。
答案 1 :(得分:1)
Qt 5和OS X 10.9或更高版本的现代方法是:
icon.SvgPath = "Umbrella.Images." + currentWeather.IconSource + ".svg";