2014-11-04 65 views
0

我需要获取应用程序目录或可执行文件的路径。如何在OS X应用程序包的Res​​ources文件夹中检索项目的位置,位于Qt

我发现

QString appPath = QCoreApplication::applicationDirPath(); 

将做到这一点。

但是当我跑,我得到错误:

QCoreApplication::applicationDirPath: Please instantiate the QCoreApplication object first 

如果我尝试,虽然我得到生成错误创建QCoreApplication的实例...

error: no matching function for call to 'QCoreApplication::QCoreApplication()' 

使用,而不是QCoreApplication给出的QApplication我有类似的错误。

这个调用不是由main()实现的,它实例化了一个应用程序类型类...它来自很远的配置类。

这是如何完成的?

的Qt 4.8

注:我试图得到的是实际的应用程序目录(MAC,我会用它来生成目录/资源的绝对路径)。

使用相对路径没有工作(我有一个有趣的@符号,当我打印的路径,相对路径部分之前,我试图从那里加载文件加载失败)

@/myapplication.app/Contents/Resources/myfile 

而不是

path/myapplication.app/Contents/Resources/myfile 
+0

所以你的问题很简单,“我如何获得资源文件夹的位置一个OS X应用程序包?“ – TheDarkKnight 2014-11-04 16:42:27

+0

很多是的:-) – Thalia 2014-11-04 16:43:22

回答

1

要访问的资源文件夹中的文件或项目,将有可能从那里可执行文件的位置和工作启动。但是,如果Apple决定更改捆绑包的格式,这可能会导致问题。

由于Qt没有直接提供,我建议使用Apple的Core Foundation,它可以在Qt应用程序中使用。假设我们希望有一个叫做“ITEMNAME”的资源,它驻留在资源文件夹,我们将在QString的itemPath完整路径: -

// get item path... 
    QString itemPath; 
    { 
     CFURLRef appUrlRef; 
     appUrlRef = CFBundleCopyResourceURL(CFBundleGetMainBundle(), CFSTR("itemName"), CFSTR("bundle"), NULL); 

     CFStringRef macPath = CFURLCopyFileSystemPath(appUrlRef, kCFURLPOSIXPathStyle); 
     itemPath = CFStringGetCStringPtr(macPath, CFStringGetSystemEncoding()); 

     // must release core foundation objects 
     CFRelease(appUrlRef); 
     CFRelease(macPath); 
    } 

为了使用的CoreFoundation功能,只需添加包括您implmentation文件: -

#include <corefoundation/CFBundle.h> 

,并在项目文件(.pro),来添加相关的框架

LIBS += -framework CoreFoundation 
+0

对不起,我忘了提及,我坚持4.x(使用4.8)...我知道应用程序可以在任何地方,这就是为什么我试图检索的位置。应用程序(所以我可以在内部生成一个绝对路径,目录/资源) – Thalia 2014-11-04 16:34:37

+0

我会在Mac上尝试一下,快速的问题 - CFBundleCopyResourceURL看起来像我在plist文件中看到的项目 - 我是否还需要添加任何内容? – Thalia 2014-11-04 16:52:36

+0

我不相信这与这个实例有什么关系。该函数仅返回包中的指定资源的位置,如Apple的文档中所述:https://developer.apple.com/library/Mac/documentation/CoreFoundation/Reference/CFBundleRef/index.html#//apple_ref/ c/func/CFBundleCopyResourceURL – TheDarkKnight 2014-11-04 16:54:37

相关问题