Qt - 访问捆绑路径

时间:2010-08-15 21:43:52

标签: c++ macos qt

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;

2 个答案:

答案 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";