播放持续几分钟的连续警告声音而不影响主线程性能的最简单方法是什么?
我知道QSound可以在异步模式下工作,但是,根据这里:
Qt: How to play sound witout blocking main thread?
QSound仍会对主线程带来明显的影响。

有什么简单的解决方案吗?

最佳答案

如前所述,尝试在另一个线程中播放声音。但是QSound没有足够的信号来控制它。如果您想获得更深入的控制,可以使用QSoundEffect尝试以下操作:

header :

#ifndef WORKER_H
#define WORKER_H

#include <QObject>

class Worker : public QObject
{
    Q_OBJECT
public:
    explicit Worker(QObject *parent = 0);


signals:

public slots:
    void process();

};

#endif // WORKER_H

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

Worker::Worker(QObject *parent) :
    QObject(parent)
{
}

void Worker::process()
{
    QSound *sound = new QSound("path");
    sound->setLoops(100);
    sound->play();
}

用法:
QThread *thr = new QThread;
Worker * work = new Worker;
connect(thr, SIGNAL(started()), work, SLOT(process()));
work->moveToThread(thr);
thr->start();

要播放几分钟,您可以设置无限数量的循环并使用QTimer(也许是singleShot)结束线程并删除对象(音乐也会停止)。

关于c++ - Qt持续发出警告声?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26508826/

10-12 17:29