我正在使用QSound
来播放音频文件。音频文件持续时间为10秒。
播放完整的10秒音频文件后,我有一些任务。所以对于这个我使用QSound::isFinished
方法,但这总是立即返回false。示例
答案 0 :(得分:3)
根据问题的当前措辞,我假设您正在立即检查isFinished,这确实会返回false。
我认为你最好的选择是使用QTimer并将它的超时信号连接到某个将检查isFinished的插槽。您可以在声音开始播放时启动计时器。当isFinished返回true时,您可以停止计时器并执行任何需要执行的操作。如果返回false,则等待下一次超时。
// In the .h
// ...
private slots:
void onTimeout();
private:
QTimer* timer;
QSound sound;
// ...
// In the .cpp
// In your constructor
// ...
timer = new Timer();
connect( timer, SIGNAL( timeout() ), this, SIGNAL( onTimeout() ) ),
// ...
// Starting the sound
// ...
sound.play();
timer.start( 10 ); // In milliseconds.
// ...
// onTimeout slot
void MyClass::onTimeout()
{
if( sound.isFinished() )
{
timer.stop();
// Do some things.
}
}
我假设可以播放不同长度的音频文件,我选择了10毫秒。 QSound也不能保证立即开始播放。
如果您知道的事实所播放的音频将始终具有相同的长度,您可以放弃isFinished检查并将定时器更改为单次拍摄,持续时间与文件的长度相同(加上一点来说明变量的开始时间)。这将导致它只超时一次,应在文件结束后这样做。这不是我的首选方法,但它有可能。
答案 1 :(得分:1)
改为使用QSoundEffect并连接到playingChanged信号。