问:如何正确使用QSound的播放插槽?

时间:2014-10-30 18:14:45

标签: c++ qt

我写了一个小的woker线程来播放Qt中的声音。 代码如下:

Worker::Worker(QObject *parent) :
    QObject(parent)
{
    sound = new QSound("C:/Qt/Tools/QtCreator/bin/warning_sound/alert.wav");
    sound->setLoops(10);
}

Worker::~Worker(){
    delete sound;
}

void Worker::process()
{

    sound->play();
}

进程SLOT将在其他地方触发。 但是,它可能会被多次触发。我想要的效果是:

  1. 无论SLOT被触发了多少次,一旦它不再被触发,声音将只播放10次。

  2. 一旦SLOT被触发并且在播放声音期间,即使收到信号,SLOT也不会被触发。

  3. 我怎么能实现这个目标?

1 个答案:

答案 0 :(得分:1)

非常简单的解决方案,但我认为它应该有效。使用其他boolWarning:我的示例中有全局变量,我只是为了速度,避免全局变量,例如将其用作私有成员。

编辑:

我记得你的最后一个问题,如果你想获得更多的控制权(它有更多的信号和方法),我建议你使用QSoundEffect。所以我现在也推荐它,但你也可以使用QSound下一个技巧:

#include "worker.h"
#include <QSound>
#include <QDebug>

bool active;
QSound *sound;
Worker::Worker(QObject *parent) :
    QObject(parent)
{
    sound = new QSound("path",this);
    sound->setLoops(6);
    active = false;
}

Worker::~Worker()
{
}

void Worker::process()
{
    if(sound->isFinished())
        active = false;
    if(!active)
    {
        sound->play();
        active = true;
        qDebug() << "called";
    }
}