【问题标题】:How to reference Resources folder in code如何在代码中引用资源文件夹
【发布时间】:2010-10-09 01:57:42
【问题描述】:

我正在将一个 c++ Qt 应用程序从 Windows 移植到 OSX,我无法理解 .app 捆绑包的概念。我希望有人能帮助我理解。

我的可执行文件位于此处:MyProgram.app/Content/MacOS/MyProgram.exe

我的资源文件夹位于:MyProgram.app/Content/Resources/

在我的代码中,我使用相对路径来引用资源文件夹中的项目:

"../Resources/something.png"

如果我打开 .app 包并直接运行 .exe,这将非常有用。

但这不是 .app 捆绑包的工作方式。用户应该单击 Finder 中的 .app 包来运行程序。但在那种情况下,我的相对路径不再有效,这是我不明白的。

有人了解我的问题以及如何解决它吗?

【问题讨论】:

标签: c++ macos qt bundle


【解决方案1】:

当你编译你的产品时,你是否尝试过将Resources 的路径设置为相对路径?否则,您可以检索主包、应用程序的 URL 并将其附加到资源 URL。

【讨论】:

    【解决方案2】:

    Bundle Programming Guide

    似乎所有东西都有手册:)

    【讨论】:

    • 很遗憾,您的链接失效了,我在 apple.com 上找不到具有此标题的页面。
    • 谢谢,已将其更新为新指南中基本相似的内容。
    【解决方案3】:

    【讨论】:

    • 我最喜欢这个解决方案,因为它不依赖于特定于平台的代码。谢谢!
    • 或 QCoreApplication::applicationDirPath() - 适用于非基于 gui 的 Qt 应用程序。
    【解决方案4】:

    我们使用:

    QDir
    CoreDir::bundle()
    {
        // Trolltech provided example
        CFURLRef appUrlRef = CFBundleCopyBundleURL( CFBundleGetMainBundle() );
        CFStringRef macPath = CFURLCopyFileSystemPath( appUrlRef, kCFURLPOSIXPathStyle );
        QString path = CFStringToQString( macPath );
        CFRelease(appUrlRef);
        CFRelease(macPath);
        return QDir( path );
    }
    

    CoreDir::bundle().filePath("../Resources");

    【讨论】:

      猜你喜欢
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多