Qt程序添加音乐和音效,解决QtCreator中给程序添加音乐失败的问题

Qt程序添加音乐和音效,解决QtCreator中给程序添加音乐失败的问题

最近写了个Qt小游戏,希望添加个背景音乐,却失败了很多次,下面总结一下经验。

添加音乐或者音效一般需要使用multimedia库。

首先在pro文件中添加QT += multimedia

然后我们可以使用QSound类或者QMediaPlayer类来添加音乐。
在这里插入图片描述

方式1:注意该方式中QSound中的音乐格式是wav,而不是mp3,mp3格式在此方式中无法播放,如果是多次调用某音效就使用该方式。
#include <QSound>
QSound *startsound=new QSound(":/qss/backgroundmusic.wav",this);
startsound->play();  //播放
startsound->setLoops(-1);//循环次数,-1代表一直循环
方式2:该方式更适合添加背景音乐。
#include <QMediaPlayer>
QMediaPlayer *startSound;  //创建一个音乐播放器
//connect(startSound,SIGNAL(positionChanged(qint64)),this,SLOT(postitionChanged(qint64)));
startSound>setMedia(QUrl::fromLocalFile("C:\\Users\\TuZhou\\Desktop\\music.wav");
startSound->setVolume(80);  //音量
startSound->play();

请注意该方式中我的音乐路径和方式1中的路径有什么不同吗?
对滴,方式1中音乐路径用的是resources文件中copy来的路径,而方式2中的路径是电脑中的文件路径,前面这个fromLocalfile是从电脑本地寻找文件,该方式中你可以使用绝对路径,也可以使用相对路径,但是不能使用resources中copy来的路径,而且使用\需要用两个\,不然会被当成转义字符导致出错。

如果你想使用resources中copy来的路径,可以这么改:

#include <QMediaPlayer>
QMediaPlayer *startSound;  //创建一个音乐播放器
//connect(startSound,SIGNAL(positionChanged(qint64)),this,SLOT(postitionChanged(qint64)));
startSound>setMedia(QUrl("qrc:/new/sound/sounds/music.mp3");
startSound->setVolume(80);  //音量
startSound->play();

删除fromLocalFile函数,直接使用QUrl()函数转换路径,此时你在resources中copy的路径为:
在这里插入图片描述
此时无法使用电脑本地的路径,只能用resources中的路径。

什么?你说你不会添加resources文件?
那行吧,我说下。

先右键项目Add New文件,选择Qt模板中的Resource File。
在这里插入图片描述

然后点击Resources下qrc文件界面中的添加前缀然后点击添加文件。
前缀名可以更改,也可以不改。
在这里插入图片描述
添加文件时选中你需要的音乐文件打开即可。
不过你要提前把音乐文件放在你项目文件夹中。
然后最后右键项目点击构建然后点击qmake就好了。

方式3:如果你想循环播放某音乐,或者是添加多首音乐播放。
#include <QMediaPlaylist>
#include <QMediaPlayer>

QMediaPlayList *musicList = new QMediaPlayList(this);  //添加音乐列表
musicList->addmeida(QUrl("qrc:/new/sound/sounds/backmusic.mp3"))  //添加音乐列表
musicList->addMedia(QUrl("qrc:/new/sound/sounds/di.wav"));
musicList->addMedia(QUrl("qrc:/new/sound/sounds/gameover.mp3"));
musicList->addMedia(QUrl("qrc:/new/sound/sounds/music.wav"));

QMidiaPlayer *soundPlayer = new QMediaPlayer(this);  //创建音乐播放器
soundPlayer->setPlaylist(musicList);  //设置音乐列表
soundPlayer->Play();  
//以上会使音乐顺序播放
//如果只有一首音乐,同样添加到musicList中,再添加一条
musicList->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop);  //循环播放
//这样就可以单首音乐循环播放

参考文章

  • 35
    点赞
  • 142
    收藏
    觉得还不错? 一键收藏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值