本文主要是介绍C12—基于QMediaPlayer制作音乐播放器2022-03-31,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Qt制作音乐播放器
场景
制作一款音乐播放器,能够支持wav、mp3文件的播放,用户可以选择列表中的歌曲进行播放,有三个按钮对应播放/暂停,上一曲,下一曲。源代码下载
步骤
1.搭建界面,准备素材
界面搭建如下:
布局的时候为了美观可以给弹簧或者部件设置固定值。背景图网上随处可见,音乐素材可以去耳聆网去找,图标可以去阿里巴巴图标矢量库去找。需要注意的是,这个程序中,使用样式表的方法设置背景,那需要重写paintEvent()函数,否则将看不到背景图。重写代码如下:
void Widget::paintEvent(QPaintEvent *e)
{QStyleOption opt;opt.init(this);QPainter p(this);style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
2.加载某一个固定的目录的音乐文件。使用QDir创建目录,配合QStringList创建文件过滤器,将文件名字全部添加到界面空间listWidget中。
3.创建播放器管理对象,即实例化QMediaPlayer,并进行必要的功能配置。
4.写三个按钮的槽函数,实现对应功能。
总结与思考
总结:
1.代码中提供了两种设置窗体背景的方法,使用样式表的方法时,对应的样式表的代码如下:
background-image: url(:/img/background.jpeg);//改为自己的路径即可
2.设置按钮的图标,在我的文章中,之前都是使用setIcon,本次使用设置样式表的方式。
3.使用QDir获取某一路径下文件的方式应该注意和学习,同时使用文件过滤器的方法也应掌握。
4.使用QMediaPlayer播放音乐文件的方法第一次出现,同时要注意使用这个类,应在.pro文件中添加QT += multimedia。
拓展
这个小项目写的比较粗糙,只实现了基础功能,可以再次基础上从实用角度和技术角度完善,包括了:
1.可以使用Vertical Slider或者Dial控件调整音量;
2.QMediaPlayer有关于进度的信号作为接口,实现播放进度条。
3.QMediaPlayer切换不同播放状态(stop,playing,pasue)时会发出信号,可以根据这些信号丰富一下界面。
4.可以在listWidget中加上鼠标点击事件,例如双击播放。
5.可以实现拖拽进入执行播放的功能。
6.使用QLabel显示正在播放的文件名。
7.使用按钮可以刷新”目录中的内容“或者导入某些文件。
8.QMediaPlayer的setMedia方法可以播放网络歌曲,将Url设置为网络地址即可。
代码
main文件
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}
.h文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QStyleOption>
#include <QPainter>
#include <QDir>
#include <QListWidgetItem>
#include <QMediaPlayer>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{Q_OBJECT
public:Widget(QWidget *parent = nullptr);~Widget();
protected:void paintEvent(QPaintEvent*);
private slots:void on_lastBtn_clicked();void on_startBtn_clicked();void on_nextBtn_clicked();
private:QString myDir;//获取音乐目录QListWidgetItem *myItem;//音乐列表指针QMediaPlayer *myPlayer;//播放器指针bool isStart;//指示播放状态int listNum;//列表总数int currentIndex;//当前索引
private:Ui::Widget *ui;void Init();void getDir();void setPlayer();
};
#endif // WIDGET_H
.cpp文件
#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);Init();
}Widget::~Widget()
{delete myItem;delete ui;
}void Widget::paintEvent(QPaintEvent *e)
{//添加背景图的第一种方法,QSS中添加背景图,在此处重绘才可以显示QStyleOption opt;opt.init(this);QPainter p(this);style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);//添加背景图第二种方法
// QPainter painter(this);
// QPixmap pix(":/img/background.jpeg");
// pix.scaled(this->width(),this->height());
// painter.drawPixmap(0,0,this->width(),this->height(),pix);}void Widget::Init()
{//初始配置和成员变量初始化this->setWindowTitle("音乐播放器JC");myDir.clear();isStart=false;myItem = new QListWidgetItem();myPlayer=new QMediaPlayer(this);listNum=0;currentIndex=0;getDir();setPlayer();
}void Widget::getDir()
{//1.设置遍历路径myDir = "E:/myCsdn/C12QMusicPlayer/myMusicPlayer/music";QDir dir(myDir);//2.设置文件过滤器QStringList myFileters;myFileters<<"*.wav" << "*.mp3";//3.保存过滤后的文件名QStringList fileList = dir.entryList(myFileters,QDir::Files|QDir::Readable,QDir::Name);//4.添加到listwidget中ui->listWidget->addItems(fileList);ui->listWidget->sortItems();listNum=ui->listWidget->count()-1;myItem = ui->listWidget->item(0);myItem->setSelected(true);
}
//设置播放器当前曲目
void Widget::setPlayer()
{myPlayer->setMedia(QUrl::fromLocalFile(myDir+'/'+ui->listWidget->item(currentIndex)->text()));myPlayer->setVolume(30);//设置音量myPlayer->pause();
}//上一曲 暂停当前曲目,判断边界,播放器指向上一首,准备播放
void Widget::on_lastBtn_clicked()
{if(currentIndex==0){currentIndex=listNum;}else{currentIndex--;}setPlayer();if(!isStart){//当前未播放myItem = ui->listWidget->item(currentIndex);myItem->setSelected(true);}else{//当前正在播放myPlayer->stop();myPlayer->play();myItem = ui->listWidget->item(currentIndex);myItem->setSelected(true);}
}
//播放 暂停:切换图标,并且执行暂停/播放操作
void Widget::on_startBtn_clicked()
{if(isStart){isStart=false;ui->startBtn->setStyleSheet("QPushButton#startBtn{border-image: url(:/img/start.png);background:transparent;}");myPlayer->pause();}else{isStart=true;ui->startBtn->setStyleSheet("QPushButton#startBtn{border-image: url(:/img/stop.png);background:transparent;}");myPlayer->play();}
}
//下一曲:暂停当前曲目,判断边界,播放器指向下一首,准备播放
void Widget::on_nextBtn_clicked()
{if(currentIndex==listNum){currentIndex=0;}else{currentIndex++;}setPlayer();if(!isStart){myItem = ui->listWidget->item(currentIndex);myItem->setSelected(true);//设置选中}else{myPlayer->stop();myPlayer->play();myItem = ui->listWidget->item(currentIndex);myItem->setSelected(true);}
}
这篇关于C12—基于QMediaPlayer制作音乐播放器2022-03-31的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!