2017-05-19 156 views
0

問題: 以下調用不會使QMediaPlayer播放任何聲音。QMediaplayer:沒有聲音

player->setMedia(QUrl("qrc:/snd/coin-refund.mp3")); 
player->play(); 

哪裏playerQMediaPlayer*類型。 URL使用QtCreator複製URL選項生成。所以文件肯定在.qrc文件中。

詳情:

我從QObject得出這樣一個類:

class MyClass : public QObject 
{ 
    Q_OBJECT 
    // some stuff 
    private: 
    QMediaPlayer* player; 
} 

調用在MyClass的構造這樣的QMediaPlayer標準構造...

MyClass::MyClass() : 
    player(new QMediaPlayer) 
{ 
} 

...在運行時導致以下錯誤消息(應用程序編譯時沒有任何警告)

的QObject :: startTimer所:定時器只能與線程使用開始 的QThread

刪除玩家刪除該郵件(我還沒有明確創建任何QThreads或QTimers)。

在我的.pro文件,我有:

QT += core gui webkitwidgets multimedia multimediawidgets widgets 

附加信息: 我在Arch Linux的使用QtCreator 4.2.2和Qt 5.8.0

編輯:

github link

ldd output (pastebin)

+0

你是否安裝了mp3的編解碼器?我正在使用Archlinux,Qt 5.8,並且我沒有任何問題...如果您可以通過github,dropbox或類似工具共享您的項目,您可以提供更好的幫助。 – eyllanesc

+0

你可以運行:'ldd your_executable'並顯示你得到的。 – eyllanesc

+0

@eyllanesc根據要求添加了github鏈接。 – Alex

回答

1

問題似乎是,對象無法在構造函數中正確啓動,至今我發現的解決方案是在您每次想要創建對象時創建對象play()

void automaton::vendorSlot(const unsigned int buttonPressed) 
{ 
    player = new QMediaPlayer; 
    switch (buttonPressed) 
    [...] 
+0

這也適用於我!奇怪的是,它在類構造函數中初始化時不起作用... – Alex