gpt4 book ai didi

c++ - Qt:如何正确使用QSound的play slot?

转载 作者:太空宇宙 更新时间:2023-11-04 11:26:01 24 4
gpt4 key购买 nike

我已经编写了一个小的 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即使收到信号也不会再被触发。

我怎样才能做到这一点?

最佳答案

非常简单的解决方案,但我认为它应该可行。使用额外的 bool警告:我的示例中有全局变量,我这样做只是为了速度,避免使用全局变量,例如将其用作私有(private)成员。

编辑:

我记得你上一个问题,如果你想获得更多控制(它有更多信号和方法),我建议你使用 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";
}
}

关于c++ - Qt:如何正确使用QSound的play slot?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26660401/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com