#include "widget.h"
#include "ui_widget.h"
#include <QFileDialog>
#include <QString>
#include <QStringList>
#include <QMenu>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
ui->volumeSlider->setRange(0,100);
this->setWindowTitle(tr("音乐播放器"));
this->playList=new QMediaPlaylist(this);
playList->setPlaybackMode(QMediaPlaylist::Loop);
this->player=new QMediaPlayer(this);
player->setPlaylist(playList);
player->setVolume(50);
ui->volumeSlider->setValue(50);
ui->songsList->setStyleSheet("background-color:transparent;color: white;");
ui->addSongsButton->setStyleSheet("QPushButton{background: transparent;}");
ui->addSongsButton->setFlat(true);
ui->clearButton->setStyleSheet("QPushButton{background: transparent;}");
ui->clearButton->setFlat(true);
ui->delectButton->setStyleSheet("QPushButton{background: transparent;}");
ui->delectButton->setFlat(true);
ui->volumeButton->setStyleSheet("QPushButton{background: transparent;}");
ui->volumeButton->setText(" ");
ui->volumeButton->setFlat(true);
connect(ui->volumeSlider,SIGNAL(valueChanged(int)),this,SLOT(setVol(int)));
connect(ui->addSongsButton,SIGNAL(clicked()),this,SLOT(addSongs()));
connect(ui->playPauseButton,SIGNAL(clicked()),this,SLOT(playPause()));
connect(ui->previousButton,SIGNAL(clicked()),this,SLOT(playPrevious()));
connect(ui->nextButton,SIGNAL(clicked()),this,SLOT(playNext()));
connect(player,SIGNAL(durationChanged(qint64)),this,SLOT(durChanged(qint64)));
connect(player,SIGNAL(positionChanged(qint64)),this,SLOT(posChanged(qint64)));
connect(ui->processSlider,SIGNAL(valueChanged(int)),this,SLOT(setPos(int)));
connect(ui->clearButton,SIGNAL(clicked()),this,SLOT(clearList()));
connect(ui->delectButton,SIGNAL(clicked()),this,SLOT(delectSong()));
connect(ui->volumeButton,SIGNAL(clicked()),this,SLOT(volumeSilence()));
ui->playPauseButton->setStyleSheet("QPushButton{background: transparent;}");
ui->playPauseButton->setFlat(true);
ui->playPauseButton->setText(" ");
ui->previousButton->setStyleSheet("QPushButton{background: transparent;}");
ui->previousButton->setFlat(true);
ui->nextButton->setStyleSheet("QPushButton{background: transparent;}");
ui->nextButton->setFlat(true);
action_hideShow=new QAction(tr("隐藏/显示窗口部件"),this);
action_addSongs=new QAction(tr("添加本地歌曲"),this);
action_playPause=new QAction(tr("播放/暂停"),this);
action_stop=new QAction(tr("停止"),this);
action_previous=new QAction(tr("上一曲"),this);
action_next=new QAction(tr("下一曲"),this);
action_addVolume=new QAction(tr("音量+(5%)"),this);
action_redVolume=new QAction(tr("音量-(5%)"),this);
action_quit=new QAction(tr("退出"),this);
connect(action_hideShow,SIGNAL(triggered()),this,SLOT(hideShow()));
connect(action_addSongs,SIGNAL(triggered()),this,SLOT(addSongs()));
connect(action_playPause,SIGNAL(triggered()),this,SLOT(playPause()));
connect(action_previous,SIGNAL(triggered()),this,SLOT(playPrevious()));
connect(action_next,SIGNAL(triggered()),this,SLOT(playNext()));
connect(action_addVolume,SIGNAL(triggered()),this,SLOT(addVolume()));
connect(action_redVolume,SIGNAL(triggered()),this,SLOT(redVolume()));
connect(action_quit,SIGNAL(triggered()),this,SLOT(close()));
ui->label->setAlignment(Qt::AlignCenter);
ui->label_2->setAlignment(Qt::AlignCenter);
ui->label_3->setAlignment(Qt::AlignCenter);
}
Widget::~Widget()
{
delete ui;
}
//每当音量进度条改变,会触发这个槽函数重新设置音量大小
void Widget::setVol(int vol)
{
player->setVolume(vol);
}
//选择要添加的所有歌曲,添加到QStringList中,遍历QStringList中的所有.MP3文件
//添加到playList中,并且添加到ui界面的QlistWight中
void Widget::addSongs()
{
QStringList songsList=QFileDialog::getOpenFileNames(this,"选择文件",QDir::homePath(),"*.mp3");
for(int i=0;i<songsList.size();i++)
{
QString song=songsList.at(i);
qDebug()<<song;
//歌词存放路径
playPath =song.left(song.lastIndexOf("/"));
qDebug()<<playPath;
this->playList->addMedia(QUrl::fromLocalFile(song));
QStringList songL=song.split('/');
song=songL.last();
ui->songsList->addItem(song);
}
}
//播放/暂停
void Widget::playPause()
{
ui->processSlider->setEnabled(true);
if(" "==ui->playPauseButton->text())
{
int index=ui->songsList->currentRow();
if(-1!=index)
{
//歌曲名字
QString songname =ui->songsList->item(index)->text().left(ui->songsList->item(index)->text().lastIndexOf("."));
playList->setCurrentIndex(index);
player->play();
ui->playPauseButton->setText("\n");
ui->label_background->setStyleSheet("background-image: url(:/pic/音乐播放器-背景播放.png);");
// 读取歌词文件
if(!lyrics.readLyricsFile(playPath+"/"+songname+".lrc")){
ui->label->setText(" 未检测到歌词文件");
ui->label_2->setText("请检查歌词文件是否存在");
}
lyricsID = 0;
}
}
else
{
player->pause();
ui->playPauseButton->setText(" ");
ui->label_background->setStyleSheet("background-image: url(:/pic/音乐播放器-背景停止.png);");
// 清空歌词
// ui->label->clear();
// ui->label_2->clear();
lyrics.listLyricsText.clear();
}
}
//播放上一曲
void Widget::playPrevious()
{
player->stop();
int index=playList->currentIndex();
if(0==index)
index=playList->mediaCount()-1;
else
index--;
playList->setCurrentIndex(index);
ui->songsList->setCurrentRow(index);
ui->playPauseButton->setText(" ");
ui->label_background->setStyleSheet("background-image: url(:/pic/音乐播放器-背景播放.png);");
// 清空歌词
ui->label->clear();
ui->label_2->clear();
ui->label_3->clear();
lyrics.listLyricsText.clear();
}
//播放下一曲
void Widget::playNext()
{
player->stop();
int index=playList->currentIndex();
if(index==playList->mediaCount()-1)
index=0;
else
index++;
playList->setCurrentIndex(index);
ui->songsList->setCurrentRow(index);
ui->playPauseButton->setText(" ");
ui->label_background->setStyleSheet("background-image: url(:/pic/音乐播放器-背景播放.png);");
// 清空歌词
ui->label->clear();
ui->label_2->clear();
ui->label_3->clear();
lyrics.listLyricsText.clear();
}
//设置进度条显示范围,并计算歌曲总时间,显示出来
void Widget::durChanged(qint64 dur)
{
ui->processSlider->setRange(0,dur);
totalTime.clear();
dur/=1000;
totalTime+=QString::number(dur/60);
totalTime+=':';
if(dur%60<10)
totalTime+='0';
totalTime+=QString::number(dur%60);
ui->totalTimeLabel->setText(totalTime);
}
//设置进度条的值,并计算当前时间,显示出来
void Widget::posChanged(qint64 pos)
{
presentTime.clear();
ui->processSlider->setValue(pos);
pos/=1000;
presentTime+=QString::number(pos/60);
presentTime+=':';
if(pos%60<10)
presentTime+='0';
presentTime+=QString::number(pos%60);
ui->presentTimeLabel->setText(presentTime);
if(presentTime==totalTime)
{
presentTime.clear();
player->stop();
ui->label->clear();
ui->label_2->clear();
ui->label_3->clear();
}
}
//根据播放进度的改变设置播放进度
void Widget::setPos(int pos)
{
setPlayTime();
}
//清空播放列表
void Widget::clearList()
{
playList->clear();
ui->songsList->clear();
}
//在播放列表中删除某首
没有合适的资源?快使用搜索试试~ 我知道了~
Qt音乐播放器 支持歌曲导入 歌词显示 音量控制
共36个文件
png:20个
cpp:3个
h:2个
需积分: 5 5 下载量 34 浏览量
2023-04-23
14:18:20
上传
评论 3
收藏 13.49MB RAR 举报
温馨提示
该软件是在 Linux 环境下使用 QT 开发的一款简易的音乐播放器软件。该播 放器具有如下功能: 1.批量从本地导入歌曲到歌曲列表中。 2.清空歌曲列表。 3.删除歌曲列表中选中的歌曲。 4.用进度条显示歌曲播放的进度,并显示时间。 5.用“播放/暂停”、“停止”、“上一曲”、“下一曲”四个按钮对歌曲 进行控制。 6.用滑动器对歌曲音量进行控制。 7.右键会弹出菜单,可以对程序进行相应的控制。 8.提取歌曲的歌词,并解析歌词,根据歌曲的播放进度显示歌词。
资源推荐
资源详情
资源评论
收起资源包目录
music_player.rar (36个子文件)
music_player
widget.ui 9KB
pic
音乐播放器_05.png 1KB
音乐播放器_01.png 2KB
音乐播放器_03.png 1KB
音乐播放器-背景停止.png 14KB
_09.png 1KB
音乐播放器-背景.png 7KB
音乐播放器-背景播放.png 14KB
音乐播放器_02.png 1KB
音乐播放器_06.png 1KB
音乐播放器_07.png 1KB
音乐播放器_08.png 1KB
音乐播放器_04.png 1KB
widget.cpp 11KB
music
演员.mp3 10.07MB
悟空.lrc 1KB
演员.lrc 2KB
悟空.mp3 3.1MB
lyrics.cpp 2KB
main.cpp 166B
myicon.rc 43B
icons.qrc 991B
音乐播放器.png 30KB
music_player.pro 1KB
lyrics.h 642B
images
stop.png 26KB
previous.png 31KB
volume.png 26KB
silence.png 139KB
next.png 31KB
interface.jpg 28KB
play.png 30KB
pause.png 28KB
black.bmp 561KB
myicon.ico 9KB
widget.h 1KB
共 36 条
- 1
资源评论
爱吃肉的老狼
- 粉丝: 298
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功