2012-09-14 91 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; 
    }