2012-09-14 90 views
1

我正在做一個需求,當用戶在QTextEdit中鍵入內容時需要播放.wav文件。我做了一些代碼,但在一分鐘或更短時間後,聲音就停止了,所以我做了一個愚蠢的工作周。點擊30次後,我調用sound-> stop();然後循環再次開始,這有效,但它不好,你能給出更好的解決方案嗎?這裏是我的代碼:Qt C++在按鍵上播放聲音 - 幾秒鐘後停止工作

int count = 0; 
bool MainWindow::eventFilter(QObject *o, QEvent *e){ 
    if(e->type() == QEvent::KeyPress) 
     { 
     tipka->play(); 
     tipka->seek(0); 
     count++; 
     if(count == 30){ 
      tipka->pause(); 
      count = 0; 
     } 
     } 
    return false; 
} 
+0

是什麼tipka變量的類型?爲什麼要在主窗口上過濾事件而不從textEdit獲取信號?什麼意思「但它不好」?這些只是在這個神祕的問題中舉行的許多未答覆的謎語中的一部分。 –

+1

tipka是Phonon :: MediaObject。我正在過濾事件,因爲我在互聯網上找到了解決方案。 「但它不好」意味着它工作了幾秒鐘然後停止,然後在5秒或更長時間後再次開始工作,然後再次停止等,所以它不好。 :) – Alen

回答

1

您可以使用QSound。它不提供任何搜索功能,但它可以讓您循環,播放和停止。這不是功能豐富,但它完成了工作。

QSound sound("File name.wav"); 
sound.play(); 
sound.stop(); 

此外,您可以使用其靜態功能播放聲音。

QSound::play("File name.wav"); 
+1

QSound不再使用,至少在Linux上,並順便說一句我正在使用Linux – Alen

+2

當然是。即使您使用[Qt5](http://doc-snapshot.qt-project.org/5.0/qsound.html),它仍然受支持。 – Keith

+0

我已經嘗試過了,但是它沒有給揚聲器提供任何輸出,所以我搜索了一下,發現它在Qt 4中不受支持,也許我錯了,但這就是我發現的。真的QSound它不工作,即使我把聲音文件的完整路徑。 – Alen

0

試試這個,後來感謝我:) 在主窗口的構造 -

installEventFilter(this); 

在報頭 -

protected: 
    bool eventFilter(QObject *, QEvent*); 

在CPP-

bool MainWindow::eventFilter(QObject *o, QEvent *e){ 

    Q_UNUSED(o); 

    if(e->type() == QEvent::KeyRelease) 
    {  player->stop(); 
      player->setMedia(QUrl("qrc:/sounds/button_push.mp3")); 
      player->play(); 
    } 
    return false; 
    }