"应用程序包"在哪里查找我的媒体文件夹?从Qt Creator运行应用程序时找到文件夹,使用终端时"找不到文件"



我在让我的app bundle从终端工作或者只是双击它时遇到了一点麻烦。

这个应用程序实际上编译,链接和运行完美的Qt Creator IDE。但是,如果我试图从终端打开它,我得到一个"媒体/文件"。X文件未找到"错误。App bundle也不是/Contents/MacOS/executable找到了应该在可执行文件旁边的"media"文件夹。

在我的应用程序中,我这样做:

openFile("media/file.x");

在Windows和Linux中,如果"media"文件夹与可执行文件位于相同的层次结构位置(在它旁边),则会找到该文件。在Mac上,我发现它的工作方式不同,因为Qt Creator构建了一个"App Bundle",而实际的可执行文件在/Contents/MacOS文件夹中,所以我手动复制了"media"。当从Qt Creator"播放"我的应用程序时,这没有任何麻烦,但正如之前提到的,当运行包本身时,它不工作。

所以,有人知道在哪里或如何我可以均质化这个"媒体"文件夹的外观,所以它的工作在两个:Qt Creator和应用程序包?

最近,我一直在使用下面的命令来"安装"bundle上的文件夹。

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

谢谢你的帮助。

找了几天之后,我发现了一些讨论相对路径问题的帖子。我只是没有找到合适的词来搜索……答案显示在:

相对路径在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
// ----------------------------------------------------------------------------

重要:

最新更新