2

由于我发现 QMediaPlayer 无法从资源中检索 mp3 文件,因此我想将它们用作本地文件。我使用这个 cmd稍作修改将文件复制到安装目录:

copydata.commands = $(COPY_DIR) $$PWD/resources/sound $$OUT_PWD/HomeControl.app/Contents/MacOS
first.depends = $(first) copydata
export(first.depends)
export(copydata.commands)
QMAKE_EXTRA_TARGETS += first copydata

所以这些文件存在于 /HomeControl.app/Contents/MacOS/sound 中。从 Qt Creator 应用程序可以完美播放 mp3,但如果从构建目录执行,它根本不会播放 mp3!真的不知道为什么。

arm away btn clicked
current media:  "file:///Dev/Qt_Sample/build-test_widgets-Desktop_Qt_5_3_0_clang_64bit-Debug/HomeControl.app/Contents/MacOS/sound/System_Arm_Away.mp3"
disarm stay btn clicked
current media:  "file:///Dev/Qt_Sample/build-test_widgets-Desktop_Qt_5_3_0_clang_64bit-Debug/HomeControl.app/Contents/MacOS/sound/System_Disarmed.mp3"

与在 Qt 创建器中执行和直接从应用程序执行有什么区别吗?像调试模式还是什么?

还是有其他方法可以将 mp3 文件正确部署到包中?

4

2 回答 2

2

这就是我为 OS X 捆绑包构建资源的方式:

mac {
    Resources.files = dirInTheProjectDirectory
    Resources.path = Contents/MacOS
    QMAKE_BUNDLE_DATA += Resources
}

您可以随意调用资源。

将它们复制到Contents/MacOS/dirInTheProjectDirectory. 然后,您可以使用QDir(QCoreApplication::applicationDirPath()+"/dirInTheProjectDirectory/");

可能的问题是,当您在代码中访问它们时,您指向的是构建目录中的路径,而不是包中的路径。

于 2014-06-24T09:13:36.947 回答
0

这是我的最终解决方案。谢谢@nicholas-smith。

在 .pro 文件中:

# deploy with mp3 folder
mac {
    Resources.files = ./resources/sound
    Resources.path = Contents/MacOS
    QMAKE_BUNDLE_DATA += Resources
}

然后使用以下命令访问这些文件:

// pass the path of mp3 to the QMediaPlayer
playAudio(QCoreApplication::applicationDirPath()
    + "/sound/System_Disarmed.mp3");

从日志中显示:

arm away btn clicked
current media:  "file:///Dev/Qt_Sample/build-test_widgets-Desktop_Qt_5_3_0_clang_64bit-Debug/HomeControl.app/Contents/MacOS/sound/System_Arm_Away.mp3"
于 2014-06-24T13:54:12.867 回答