- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何同步制作QSound?
我有一个退出按钮。如果我点击它我想播放声音然后退出程序。 QSound是异步的,不知道怎么弄成同步的。
最佳答案
你真的不需要同步播放声音。任何可能阻塞 GUI 线程超过 0.10 秒的事情都不应该在那里完成,看看 here获取更多信息。
既然你愿意在用户点击退出按钮时播放声音,我认为使用 QSoundEffect
更适合你的情况,来自 docs :
This class allows you to play uncompressed audio files (typically WAV files) in a generally lower latency way, and is suitable for "feedback" type sounds in response to user actions (e.g. virtual keyboard sounds, positive or negative feedback for popup dialogs, or game sounds).
QSoundEffect
有一个信号 playingChanged()
仅当声音播放完毕时,您才能利用它关闭应用程序。我不知道为什么 QSound
没有类似的信号。
这是一个最小的例子,解释了如何做到这一点:
#include <QtWidgets>
#include <QtMultimedia>
class Widget : public QWidget {
public:
explicit Widget(QWidget* parent= nullptr):QWidget(parent) {
//set up layout
layout.addWidget(&exitButton);
//initialize sound effect with a sound file
exitSoundEffect.setSource(QUrl::fromLocalFile("soundfile.wav"));
//play sound effect when Exit is pressed
connect(&exitButton, &QPushButton::clicked, &exitSoundEffect, &QSoundEffect::play);
//close the widget when the sound effect finishes playing
connect(&exitSoundEffect, &QSoundEffect::playingChanged, this, [this]{
if(!exitSoundEffect.isPlaying()) close();
});
}
~Widget() = default;
private:
QVBoxLayout layout{this};
QPushButton exitButton{"Exit"};
QSoundEffect exitSoundEffect;
};
//sample application
int main(int argc, char* argv[]){
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
请注意,上述解决方案在音效播放完毕之前不会关闭窗口。
另一种方法似乎对应用程序用户更敏感,即关闭窗口,在窗口关闭时播放声音,然后在播放完毕后退出应用程序。但这需要在应用程序级别 (quitOnLastWindowClosed
) 关闭最后一个窗口时禁用隐式退出。
作为禁用隐式退出的结果,您必须在程序的每个可能的退出路径上添加 qApp->quit();
。这是显示第二种方法的示例:
#include <QtWidgets>
#include <QtMultimedia>
class Widget : public QWidget {
public:
explicit Widget(QWidget* parent= nullptr):QWidget(parent) {
//set up layout
layout.addWidget(&exitButton);
//initialize sound effect with a sound file
exitSoundEffect.setSource(QUrl::fromLocalFile("soundfile.wav"));
//play sound effect and close widget when exit button is pressed
connect(&exitButton, &QPushButton::clicked, &exitSoundEffect, &QSoundEffect::play);
connect(&exitButton, &QPushButton::clicked, this, &Widget::close);
//quit application when the sound effect finishes playing
connect(&exitSoundEffect, &QSoundEffect::playingChanged, this, [this]{
if(!exitSoundEffect.isPlaying()) qApp->quit();
});
}
~Widget() = default;
private:
QVBoxLayout layout{this};
QPushButton exitButton{"Exit"};
QSoundEffect exitSoundEffect;
};
//sample application
int main(int argc, char* argv[]){
QApplication a(argc, argv);
//disable implicit quit when last window is closed
a.setQuitOnLastWindowClosed(false);
Widget w;
w.show();
return a.exec();
}
关于c++ - 如何同步制作QSound?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45118886/
在为我的一个程序测试 QSound 期间,我遇到了一个我无法理解的问题。每当我在另一个对象中实现 QSound 对象时, play() 函数似乎无法调用 QSound 对象的成员变量。 下面是我用来分
我正在尝试使用Qt Creator在WAV中播放Symbian文件。 我懂了: QSound::play("c:/notify.wav"); 它可以在Windows上运行,但是当我在Symbian上尝
我有一个可以部署在其他机器 (Visual Studio) 上的应用程序。我添加了模块 QtMultimedia 以使用 QSound 类。 想要重新部署我的应用程序,可执行文件首先指示我需要 Qt5
如何从命令行爆炸 QSound? 在 PyQt4 下,playSound.py 可以像这样简单: QtGui.QSound('start.wav').play() 除非它在没有 .exec() 样式的
因此,我正在尝试在我的应用程序中播放声音。通常需要在倒计时结束后播放声音,然后停止用户交互。 但是,问题是 QSound 最终什么也没播放。 mp3、wav 等我都试过了,没有任何结果。 可能是什么原
我想用 QT 5.2.1 编译一些旧的 QT 项目,遇到了很多麻烦,其中之一是 QSound 问题: if(!QSound::isAvailable()) { ui.grpSounds->se
我正在尝试将 QSound 用于我的应用程序,但每当我尝试导入它时,我都会收到错误消息: ImportError: cannot import name 'QSound' 使用 python 控制台没
这是我的代码: from PyQt5.QtMultimedia import QSound QSound("1.wav").play() 它不播放音乐。该文件为 37 MB。 最佳答案 你必须创建一个
嘿,我正在构建一个小游戏,我正在通过制作一个数字 vector 来创建关卡,该数字 vector 通过枚举与 1-4 种颜色相关联。问题是循环(在 Simon::loadChallenge 中)我将颜
我尝试使用 QSound::play 在 Qt 中播放 .wav 文件 我试过这段代码: QSound::play("airplane.wav"); 构建时没有错误,但运行时没有声音?! 最佳答案 这
编译为 exe 后,我在使用 QSound.play() 播放 .wav 声音时遇到问题(我使用的是 Python 3.4.3、PyQt 5.4.1 和 py2exe 0.9.2.0)。 setup.
我尝试在我的项目中使用 QSound,但我得到了对 _imp_ZN6Q 的 undefined reference : #include "mainwindow.h" #include "ui_mai
我的问题可能归结为“模块叫什么”。 我想在 Qt 5.4 中使用 QSound 类,显然“Qt5Multimedia”模块没有与 QtGui 一起引入,QtCore调用时 find_package(Q
尝试通过 QSound(QT 5,Ubuntu 13.04)播放声音 代码: #include void MainWindow::on_pushButton_2_clicked() { QSound
我是一名优秀的程序员,十分优秀!