2

mp3 ファイルは QMediaPlayer でリソースから取得できないことがわかったので、それらをローカル ファイルとして使用することにしました。このコマンドを少し変更して使用し、ファイルをインストール ディレクトリにコピーします。

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
}

Resources は好きなように呼び出すことができます。

それはそれらをにコピーしますContents/MacOS/dirInTheProjectDirectory。その後、それらにアクセスできますQDir(QCoreApplication::applicationDirPath()+"/dirInTheProjectDirectory/");

考えられる問題は、コード内でそれらにアクセスしているときに、バンドル内のパスではなく、ビルド ディレクトリ内のパスを指していることです。

于 2014-06-24T09:13:36.947 に答える
0

これが私の最終的な解決策です。ありがとう@ニコラス・スミス。

.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 に答える