2011-10-03 37 views
0

我在应用程序捆绑中从终端或双击它时遇到了一些麻烦。“App Bundle”在哪里查找我的媒体文件夹?从Qt Creator运行应用程序时发现的文件夹,使用终端时“找不到文件”

此应用程序实际上编译,链接和完美运行在Qt Creator IDE中。但是,如果我尝试从终端打开它,则会出现“media/file.x文件未找到”错误。应用程序包和/ Contents/MacOS /可执行文件都找到应该在可执行文件旁边的“媒体”文件夹。

在我的应用我做这样的事情:

openFile("media/file.x"); 

在Windows和Linux,如果“媒体”文件夹恰恰是在可执行文件的同一层次的位置(旁边)这个文件会被发现。在Mac上,我发现它的工作方式不同,因为Qt Creator构建了一个“应用程序包”,而实际的可执行文件位于/ Contents/MacOS文件夹内,因此我手动将“媒体”复制到了那里。当从Qt Creator中“播放”我的应用程序时,这种方式没有任何麻烦,但是如前所述,它在运行包本身时不起作用。

因此,有谁知道我在哪里或如何均匀化这个“媒体”文件夹的外观,因此它适用于:Qt Creator和应用程序包?

最近,我一直在使用以下命令来“安装”该文件夹上的文件夹。

mac { 
    MediaFiles.files = media 
    MediaFiles.path = Contents/MacOS 
    QMAKE_BUNDLE_DATA += MediaFiles 
} 

感谢您的帮助。

回答

0

找了几天后,我发现了一些讨论相对路径问题的帖子。我只是不正确的话搜索...答案显示在:

Relative Paths Not Working in Xcode C++

http://www.experimentgarden.com/2009/06/how-to-load-resource-from-your.html

基本上有必要补充一点:

//On the include part 
#ifdef __APPLE__ 
#include "CoreFoundation/CoreFoundation.h" 
#endif 


// On the main of your app 
// This makes relative paths work in C++ in Xcode by changing directory to the Resources   folder inside the .app bundle 
#ifdef __APPLE__  
    CFBundleRef mainBundle = CFBundleGetMainBundle(); 
    CFURLRef resourcesURL = CFBundleCopyResourcesDirectoryURL(mainBundle); 
    char path[PATH_MAX]; 
    if (!CFURLGetFileSystemRepresentation(resourcesURL, TRUE, (UInt8 *)path, PATH_MAX)) 
    { 
     // error! 
    } 
    CFRelease(resourcesURL); 

    chdir(path); 
    std::cout << "Current Path: " << path << std::endl; 
#endif 
// ---------------------------------------------------------------------------- 

重要: 该chdir,改变了应用程序的工作路径,所以它没有必要改变你的相对代码之后...

相关问题