QT纯代码打造音乐播放器
在.pro文件中添加
QT = prmultimedia
然后就是在.h文件中添加相关库函数
我添加的库函数
有些是不需要的,可以自定义删除修改
我是为方便以后扩展功能就留下来了
#include <QMediaPlayer>//播放器
#include<QMediaPlaylist>//播放列表
#include<QVBoxLayout>//盒子布局
#include<QGridLayout>//网格布局
#include<QPushButton>//按钮
#include<QLabel>//标签
#include<QSlider>//滑块
#include<QLineEdit>//行编辑
#include<QDir>//驱动文件
#include<QListWidget>//文件列表
#include<QFileDialog>//文件目录
#include <QFileInfo>//文件信息
//#include<QListView>//列表视图
#include<QUrl>//链接
#include<QMessageBox>// 消息框
#include <QListWidgetItem>
#include <QDebug>//调试专用库
下面是定义.h相关的信号函数了
private slots:
//自定义槽函数
void onStateChanged(QMediaPlayer::State state);//播放器状态,状况/*在播放器播放状态变化时发射,以更新界面上的播放 暂停 停止按钮的使能状态*/
void onPlaylistChanged(int position);//播放器列表位置/*在播放列表的当前文件变化时发射,以更新界面上显示当前媒体文件名*/
void onDurationChanged(qint64 duration);//播放器持续,持续时间/*在文件时长变化时发射,用于更新界面上文件长度显示*/
void onPositionChanged(qint64 position);//播放器当前位置/*在当前文件播放位置变化时发射,用于更新界面上的播放进度显示*/
void on_btnAdd_clicked();//添加按钮函数
void on_btnRemove_clicked();//移除函数
void on_btnClear_clicked();//清除函数
void on_btnPlay_clicked(); //播放按钮函数
// void on_btnPause_clicked();
void on_btnStop_clicked();//停止函数
void on_btnNext_clicked();//下一首
void on_btnPrevious_clicked();//上一首
void on_btnSound_clicked();//音量图标
void on_sliderVolumn_valueChanged(int value);//声音调节
void on_filePosition_valueChanged(int value);//播放进度条
void on_layoutSwitChing_clicked();//界面切换
void on_listWiget_doubleClicked(const QModelIndex &index);//双击函数
void on_count_currentIndexChanged(int counts);//这个函数还没研究清楚,可以忽略
定义相关对象名称
private:
Ui::MainWindow *ui;
void initUi(); // 代码方式初始化界面
void initSignal();//QT信号装置
//void intui()和 initSignal()这两个函数可以不定义;
//将这在个函数内容写在构造函数里面即可,我是为了分模块便于理解
//特意写成这样子的,可以不相同。不过要注意里面的书写顺序
QMediaPlayer * player; // 播放器
QMediaPlaylist * playlist; //播放列表
QListWidget * listWidget;//列表
QString durationTime;//总长度
QString positionTime;//当前播放位置
QGridLayout *gridLayout;//网格布局
QVBoxLayout *boxLayout;//盒子布局
QPushButton * btnPlay;//播放
//QPushButton * btnPause;//暂停
QPushButton * btnStop; //停止
QPushButton * btnAdd; //添加加
QPushButton * btnRemove;//移除
QPushButton * btnClear;//清空
QPushButton * btnNext;//下一首
QPushButton * btnPrevious;//上一首
QPushButton * btnSound;//音量图标
QPushButton * layoutSwitChing;//布局切换按扭
QLabel * labCurMedia;//执行列表标签
QLabel * LabRatio;//时间标签
QSlider * sliderPosition;//声音滑块
QSlider * filePosition;//文件滑块
bool mute;//声音图标切换判定
bool playPause;//判断播放/暂停
bool lSwithChing;//切换判断
int count; //列表计数
};
以上都是在.h文件书写
下面到了久违的.cpp文件了
第一部分构建文件
void MainWindow::initUi(){
// 创建播放器主要框架
player= new QMediaPlayer(this); //播放器
playlist=new QMediaPlaylist(this); //播放列表
playlist->setPlaybackMode(QMediaPlaylist::Loop); //设计播放列表模式
/*
* 播放列表模型参数选择以下
* PlaybackMode {
* CurrentItemOnce, //当前项目一次
* CurrentItemInLoop, //循环中的当前项
* Sequential, //顺序
* Loop, //循环
* Random //随机
* }
*/
player->setPlaylist(playlist); //执行播放列表模式
player->setVolume(50); //初始播放声音为50
//以下为按键等非关键零部件初始化设计
/********************************************************************************/
lSwithChing=true; //布局切换判断参数
gridLayout=new QGridLayout(this); //网格化模式
boxLayout=new QVBoxLayout(this); //盒子模型(上下模式)
// ui->centralwidget->setLayout(gridLayout);
// ui->centralwidget->setLayout(boxLayout);
mute=true; //声音图标切换判定
playPause=true; //播放/暂停按钮判定
btnPlay=new QPushButton(tr("播放"),this); //初始化播放按钮
btnPlay->setIcon(QIcon(":/images/play.png")); //初始化播放按钮图标
btnPlay->setFlat(true); //设计播放按键初始化为真(则是未按下)
//btnPause=new QPushButton(tr("暂停"),this); //初始化暂停按钮
btnStop=new QPushButton(tr("停止"),this); //初始停止按钮
btnStop->setIcon(QIcon(":/images/stop.png")); //初始化停止按钮图标
btnStop->setFlat(false); //设计停止按键初始化为假(则是按下)
btnSound=new QPushButton(tr("50"),this); //初始化声音图标按钮
btnSound->setIcon(QIcon(":/images/sound.png")); //初始化声音图标按钮图标
btnAdd=new QPushButton(tr("添加"),this); //初始化添加按钮
btnAdd->setIcon(QIcon(":/images/add.png")); //初始添加按钮图标
btnRemove=new QPushButton(tr("移除"),this); //初始化移除按钮
btnRemove->setIcon(QIcon(":/images/remove.png")); //初始移除按钮图标
btnClear=new QPushButton(tr("清空"),this); //初始化清空按钮
btnClear->setIcon(QIcon(":/images/empty.png")); //初始清空按钮图标
btnPrevious=new QPushButton(tr("上一曲"),this); //初始化上一首按钮
btnPrevious->setIcon(QIcon(":/images/Previous.png")); //初始化上一首按钮图标
btnNext=new QPushButton(tr("下一曲"),this); //初始化下一首按钮
btnNext->setIcon(QIcon(":/images/next.png")); //初始化下一首按钮图标
layoutSwitChing=new QPushButton(tr("布局切换"),this) ; //初始化布局切换按扭
listWidget=new QListWidget(this);
new QListWidgetItem(tr("<<<<<<<<<<<<<<<当前文件列表>>>>>>>>>>>>>>>"), listWidget);
//初始化窗口列表
/*listWidget->setMinimumWidth(800); */ //设计最小窗口列表宽为800
labCurMedia= new QLabel(tr("当前无音乐列表 !!! "),this); //初始化当前播放文件名称
sliderPosition =new QSlider( this); //初始化声音滑块
sliderPosition->setOrientation(Qt::Horizontal); //设计声音滑块为水平方向
sliderPosition->setMinimum(0); //设计声音滑块最小值
sliderPosition->setMaximum(100); //设计声音滑块最大值
sliderPosition->setMinimumWidth(150); //设计声音滑块最小宽度
sliderPosition->setValue(50); //设计声音滑块初始化位置
filePosition=new QSlider( this); //初始化播放文件进度条滑块
filePosition->setOrientation(Qt::Horizontal); //设计播放文件进度条滑块为水平方向
// filePosition->setFixedWidth(200);
filePosition->setMinimumWidth(250); //设计播放文件进度条滑块列宽为250
LabRatio=new QLabel (tr("0:00/0:00"),this); //初始化播放文件时间标签
count=listWidget->currentRow()+2; //窗口列表计数
on_layoutSwitChing_clicked(); //初始化界面布局
}
第二部分构造函数信号,也是QT这个软件的核心,为了避免带来不必要的麻烦,建议将此部分代码写在QT构造函数最下面。毕竟编译器的读写是从上到下读取的
废话不多说了,上代码。。。
void MainWindow::initSignal(){
// 创建播放器信号关键四个关键函数
//检查信号状态信号
connect(player,SIGNAL(stateChanged(QMediaPlayer::State)),
this,SLOT(onStateChanged(QMediaPlayer::State)));
//检查列表文件当前进度信号
connect(player,SIGNAL(positionChanged(qint64 )),
this,SLOT(onPositionChanged(qint64 )));
//检查文件时长信号
connect(player,SIGNAL(durationChanged(qint64 )),
this,SLOT(onDurationChanged(qint64 )));
//检查播放列表信号
connect(playlist,SIGNAL(currentIndexChanged(int)),
this,SLOT( onPlaylistChanged(int )));
/*******************************************************/
//列表行数
//此条信号函数可以忽略。暂时没实现它的强大功能
connect(listWidget,SIGNAL(currentRowChanged(int)),
this,SLOT( on_count_currentIndexChanged(int) ));
/*******************************************************/
//检查窗口列表双击信号
connect(listWidget,SIGNAL(doubleClicked(const QModelIndex &)),
this,SLOT(on_listWiget_doubleClicked(const QModelIndex &)));
/*****************************************************/
// 创建播放器按钮信号函数
//添加按钮信号
connect(btnAdd,SIGNAL(clicked()),
this,SLOT(on_btnAdd_clicked()));
//移除按钮信号
connect(btnRemove,SIGNAL(clicked()),
this,SLOT(on_btnRemove_clicked()));
//清除信号
connect(btnClear,SIGNAL(clicked()),
this,SLOT(on_btnClear_clicked()));
//声音信号
connect(sliderPosition,SIGNAL(sliderMoved(int )),
this,SLOT(on_sliderVolumn_valueChanged(int )));
//播放信号
connect(btnPlay,SIGNAL(clicked()),
this,SLOT(on_btnPlay_clicked()));
//暂停信号
// connect(btnPause,SIGNAL(clicked()),
// this,SLOT(on_btnPause_clicked()));
//停止信号
connect( btnStop,SIGNAL(clicked()),
this,SLOT(on_btnStop_clicked()));
//下一首信号
connect( btnNext,SIGNAL(clicked()),
this,SLOT(on_btnNext_clicked()));
//上一首信号
connect( btnPrevious,SIGNAL(clicked()),
this,SLOT(on_btnPrevious_clicked()));
//界面切换信号
connect( layoutSwitChing,SIGNAL(clicked()),
this,SLOT(on_layoutSwitChing_clicked()));
/*****************************************************/
//滑块信号函数
//声音状态(静音/声音)
connect( btnSound,SIGNAL(clicked()),
this,SLOT(on_btnSound_clicked()));
//文件进程信号
connect( filePosition,SIGNAL(valueChanged(int)),
this,SLOT(on_filePosition_valueChanged(int)));
}
以上就是构成函数的全部代码,看着比较多,把多余的空行去掉,
其实也没有多少,下面就是每个功能函数的实现了
//检查播放器状态
void MainWindow::onStateChanged(QMediaPlayer::State state)//播放器状态,状况/*在播放器播放状态变化时发射,以更新界面上的播放 暂停 停止按钮的使能状态*/
{
qDebug()<<tr(">>>检查播放器状态中>>>");
if(state==QMediaPlayer::StoppedState){
if((btnPlay->isFlat())&&(btnStop->isFlat())){
on_btnNext_clicked();
}
//下面这个判断我是有点不理解,不过没有它,
//追求的自动播放下一首不能实现,有兴趣的朋友可以研究一下
if(!(state==QMediaPlayer::PlayingState)){
btnPlay->setFlat(true);
btnPlay->setText("播放");
btnPlay->setIcon(QIcon(":/images/play.png"));
playPause =true;
}
}
// btnPlay->setEnabled(!(state==QMediaPlayer::PlayingState));
if(state==QMediaPlayer::PlayingState)
{
btnPlay->setText("播放");
btnPlay->setIcon(QIcon(":/images/play.png"));
playPause =true;
}else{
btnPlay->setText("暂停");
btnPlay->setIcon(QIcon(":/images/pause.png"));
playPause =false;
}
// btnPause->setEnabled(state==QMediaPlayer::PlayingState);
btnStop->setEnabled(state==QMediaPlayer::PlayingState);
// if(state==QMediaPlayer::StoppedState){
// if((btnPlay->isFlat())){
// on_btnNext_clicked();
// btnPlay->setText("暂停");
// btnPlay->setIcon(QIcon(":/images/pause.png"));
// playPause =false;
// }
// }
qDebug()<<tr(">>>检查播放器状态成功!!!");
}
第二个重要的函数体
//检查列表文件当前进度信号
void MainWindow::onPositionChanged(qint64 position)//播放器当前位置/*在当前文件播放位置变化时发射,用于更新界面上的播放进度显示*/
{
qDebug()<<tr(">>>检查播放器列表文件当前进度时间中>>>");
if(filePosition->isSliderDown())
{
return;
}
filePosition->setSliderPosition(position);
int secs=position/1000;//秒
int mins =secs/60;//分
secs=secs%60;//余数秒
positionTime=QString::asprintf(" %d:%d",mins,secs);
LabRatio->setText(positionTime+"/"+durationTime);
playlist->setPlaybackMode(QMediaPlaylist::Loop);
qDebug()<<tr(">>>检查播放器列表文件当前进度时间成功!!!");
}
第三个函数
void MainWindow::onDurationChanged(qint64 duration)//播放器持续,持续时间/*在文件时长变化时发射,用于更新界面上文件长度显示*/
{
qDebug()<<tr(">>>检查当前播放文件最大长度中>>>");
filePosition->setMaximum(duration);
int secs=duration/1000;//秒
int mins =secs/60;//分
secs=secs%60;//余数秒
durationTime=QString::asprintf("%d:%d",mins,secs);
LabRatio->setText(positionTime+"/"+durationTime);
playlist->setPlaybackMode(QMediaPlaylist::Loop);
qDebug()<<tr(">>>检查当前播放文件最大长度成功!!!");
}
第四个函数
void MainWindow::onPlaylistChanged(int position)//播放器列表位置/*在播放列表的当前文件变化时发射,以更新界面上显示当前媒体文件名*/
{
qDebug()<<tr(">>>检查播放器列表位置中>>>");
listWidget->setCurrentRow(position);
QListWidgetItem * item =listWidget->currentItem();
if(item)
{
labCurMedia->setText(item->text());
}
qDebug()<<tr(">>>检查播放器列表位置成功!!!");
}
这个播放器几乎就是靠这四个函数功能实现了,下面就是各个零部件的构成了,下面就不多废话了,直接复制、粘贴就行了
//以下函数实现零部件函数
//布局函数
void MainWindow::on_layoutSwitChing_clicked()
{
qDebug()<<">>>检查播切换按钮中>>>";
if(lSwithChing)
{
if(gridLayout)
{
// on_btnClear_clicked();
delete gridLayout;
}
// if(boxLayout==NULL)
// {
// boxLayout=new QVboxLayout(this);
// }
boxLayout=new QVBoxLayout(this);
ui->centralwidget->setLayout(boxLayout);
//注释:这里的addwidget顺序跟布局有关系,越靠上,布局就越靠上面
boxLayout->addWidget(listWidget );//播放列表
boxLayout->addWidget(labCurMedia);//当前播放文件标签
boxLayout->addWidget(LabRatio);//当前文件播放时间
boxLayout->addWidget(filePosition);//文件 进度
boxLayout->addWidget(btnAdd);//添加按钮
boxLayout->addWidget(btnRemove);//移除按钮
boxLayout->addWidget(btnClear);//清空按钮
boxLayout->addWidget(btnPrevious);//上一曲按钮
boxLayout->addWidget(btnPlay);//播放/暂停
// boxLayout->addWidget(btnPause);//暂停
boxLayout->addWidget(btnStop);//停止
boxLayout->addWidget(btnNext);//下一曲
boxLayout->addWidget(btnSound);//声音图标
boxLayout->addWidget(sliderPosition);//声音大小滑块
/***************************************/
// boxLayout->addWidget(QListWidget::addItem(btnSound+sliderPosition));//声音大小滑块
/***************************************/
boxLayout->addWidget(layoutSwitChing);//布局按钮切换
lSwithChing=false;
}
else
{
if(boxLayout)
{
// on_btnClear_clicked();
delete boxLayout;
}
// if(gridLayout==NULL)
// {
// gridLayout=new QGridLayout(this);
// }
gridLayout=new QGridLayout(this);
ui->centralwidget->setLayout(gridLayout);
listWidget->setMinimumWidth(800);
/****网格布局对齐方式参数****/
// Constant Description
// Qt::AlignLeft Aligns with the left edge.//左对齐
// Qt::AlignRight Aligns with the right edge.//右对齐
// Qt::AlignHCenter Centers horizontally in the available space.//水平居中
// Qt::AlignJustify Justifies the text in the available space.对可用空间中的文本进行校验
//****网格布局方式****//
//参数说明:控件名,行,列,占用行数,占用列数,对齐方式
//gridLayout->addWidget(btnAdd,1,1,1,1,Qt::AlignHCenter);//
//******************************************************************************************//
/**************************************************************************/
// listWidget->setMinimumWidth(this->width());
// listWidget->setMaximumWidth(800);
//gridLayout->addWidget(listWidget, 2,1,2,5,Qt::AlignLeft );//列表
// listWidget->setMouseTracking(true);
// setMouseTracking(true);
// gridLayout->setRowStretch(2,0);
gridLayout->addWidget(listWidget, 0,1,2,-1,Qt::AlignHCenter);//列表
/**************************************************************************/
gridLayout->addWidget(btnAdd, 3,1,1,1,Qt::AlignHCenter);//添加按钮
gridLayout->addWidget(btnRemove, 3,2,1,1,Qt::AlignHCenter);//移除
gridLayout->addWidget(btnClear, 3,3,1,1,Qt::AlignHCenter);//清空
/**************************************************************************/
gridLayout->addWidget(layoutSwitChing, 3,4,1,1,Qt::AlignHCenter);//布局切换按钮
gridLayout->addWidget(btnSound, 3,5,1,1,Qt::AlignHCenter);//声音图标
/**************************************************************************/
gridLayout->addWidget(btnPrevious, 4,1,1,1,Qt::AlignHCenter);//上一首
// gridLayout->addWidget(btnPlay, 4,2,1,1,Qt::AlignHCenter);//播放
gridLayout->addWidget(btnPlay, 4,2,1,1,Qt::AlignHCenter);//播放
// gridLayout->addWidget(btnPause, 4,3,1,1,Qt::AlignHCenter);//暂停
gridLayout->addWidget(btnStop, 4,3,1,1,Qt::AlignHCenter);//停止
gridLayout->addWidget(btnNext, 4,4,1,1,Qt::AlignHCenter);//下一首
gridLayout->addWidget( sliderPosition, 4,5,1,1,Qt::AlignHCenter);//声音滑块
// gridLayout->addWidget( btnSound, 4,6,1,1,Qt::AlignHCenter);//声音滑块
/**************************************************************************/
gridLayout->setRowStretch(4,1);
gridLayout->addWidget(labCurMedia, 6,1,1,2,Qt::AlignHCenter);//当前播放文件标签
gridLayout->addWidget(filePosition, 6,3,1,2,Qt::AlignHCenter);//文件进程滑块
gridLayout->addWidget(LabRatio, 6,5,1,2,Qt::AlignHCenter);// 时长标签
lSwithChing=true;
}
qDebug()<<">>>检查播切换按钮成功>>>";
}
//双击函数
void MainWindow::on_listWiget_doubleClicked(const QModelIndex &index)
{
qDebug()<<">>>检查列表双击目标中>>>";
int rowNo=index.row();
playlist->setCurrentIndex(rowNo);
player->play();
btnPlay->setText("暂停");
btnPlay->setFlat(false);
btnPlay->setIcon(QIcon(":/images/pause.png"));
playPause =false;
btnStop->setFlat(true);
btnPlay->setFlat(false);
if( !(btnPlay->isFlat())){
btnPlay->setText("暂停");
btnPlay->setIcon(QIcon(":/images/pause.png"));
}
qDebug()<<">>>检查播放器列表成功!!!";
}
/*********************************************************************************/
//滑块实现函数
//声音滑块进度条函数
void MainWindow::on_sliderVolumn_valueChanged(int value)
{
qDebug()<<">>>检查播放器音量滑动中>>>";
player->setVolume(value);
btnSound->setText(QString::number(value));
qDebug()<<"当前检查音量为:"<<value;
qDebug()<<">>>检查播放器声音量滑动成功!!!";
}
//播放文件进度条函数
void MainWindow::on_filePosition_valueChanged(int value)
{
qDebug()<<">>>检查播放器进度条成中>>>";
player->setPosition(value);
qDebug()<<">>>检查播放器进度条成功!!!";
}
/*********************************************************************************/
//添加按钮函数
void MainWindow::on_btnAdd_clicked()
{
qDebug()<<">>>检查播放器添加按钮中>>>";
QString curPath =QDir::homePath();
QString digTile="选择音频文件";
QString filter="音频文件(*.mp3 *.wav *.wma);;mp3文件(*.mp3);;wav文件(*.wav);;wma文件(*.wma);;所有文件(*.*)";
// QStringList flieList=QFileDialog::getOpenFileNames(this,digTile,curPath,filter);
/**/
// QString flieList = QFileDialog::getOpenFileName(this, tr("选择音频文件"),
// ".",
// tr("音频文件(*.mp3 *.wav *.wma)"));
QStringList flieList = QFileDialog::getOpenFileNames(this, QStringLiteral("选择音频文件"), curPath,QStringLiteral("图音频文件(*.mp3 *.wav *.wma);;mp3文件(*.mp3);;wav文件(*.wav);;wma文件(*.wma);;所有文件(*.*)"));
if(filter.count()<1)
{
return;
}
/*****************************************/
//listWidget->currentRow();
for (int i=0;i<flieList.count();i++)
{
QString aFlie=flieList.at(i);
playlist->addMedia(QUrl::fromLocalFile(aFlie));
QFileInfo fileInfo(aFlie);
listWidget->QListWidget::addItem(QString::number(count++)+"_"+fileInfo.fileName());
// listWidget->QListWidget::addItem(QString::number(listWidget->row())+"_"+fileInfo.fileName());
// currentIndexChanged
}
if(player->state()!=QMediaPlayer::PlayingState)
{
playlist->setCurrentIndex(0);
}
// player->play();
qDebug()<<">>>检查播放器添加按钮成功!!!";
}
//移除按扭
void MainWindow::on_btnRemove_clicked()
{
qDebug()<<">>>检查播放器移除按钮中>>>";
int pos =listWidget->currentRow();
QListWidgetItem * item =listWidget->takeItem(pos);
delete item;
playlist->removeMedia(pos);
count--;
qDebug()<<">>>检查播放器移除按钮成功!!!";
}
//清空按钮
void MainWindow::on_btnClear_clicked()
{
qDebug()<<">>>检查播放器清空按钮中>>>";
playlist->clear();
listWidget->clear();
player->stop();
labCurMedia->clear();
labCurMedia->setText("当前无音乐列表 !!! ");
count=listWidget->currentRow()+2;
qDebug()<<">>>检查播放器清空按钮成功!!!";
}
//播放安扭
void MainWindow::on_btnPlay_clicked()
{
qDebug()<<">>>检查播放器播放按钮中>>>";
if(playlist->currentIndex()<0)
{
playlist->setCurrentIndex(0);
qDebug()<<">>>检查播放器播放按钮失败!!!!";
return ;
}
if(playPause)
{
player->play();
btnPlay->setText("暂停");
btnPlay->setIcon(QIcon(":/images/pause.png"));
btnStop->setFlat(true);
playPause =false;
}
else{
player->pause();
btnPlay->setText("播放");
btnPlay->setIcon(QIcon(":/images/play.png"));
playPause =true;
}
qDebug()<<">>>检查播放器播放按钮成功!!!";
}
//暂停按扭
//void MainWindow::on_btnPause_clicked()
//{
// qDebug()<<">>>检查播放器暂停按钮中>>>";
// player->pause();
// qDebug()<<">>>检查播放器暂停按钮成功!!!";
//}
//停止按扭
void MainWindow::on_btnStop_clicked()
{
qDebug()<<">>>检查播放器停止按钮中>>>";
btnPlay->setFlat(true);
playPause =true;
btnPlay->setText("播放");
btnPlay->setIcon(QIcon(":/images/play.png"));
btnStop->setFlat(false);
player->stop();
qDebug()<<">>>检查播放器停止按钮成功!!!";
}
//上一首
void MainWindow::on_btnPrevious_clicked()
{
qDebug()<<">>>检查播放器上一首按钮中>>>";
if(playlist->currentIndex()<0)
{
playlist->setCurrentIndex(0);
qDebug()<<">>>检查播放器上一首按钮失败!!!!";
return ;
}
playlist->setCurrentIndex(playlist->currentIndex()-1);
player->play();
btnPlay->setText("暂停");
btnPlay->setIcon(QIcon(":/images/pause.png"));
playPause =false;
btnStop->setFlat(true);
qDebug()<<">>>检查播放器上一首按钮成功!!";
}
//下一首
void MainWindow::on_btnNext_clicked()
{
qDebug()<<">>>检查播放器下一首按钮中>>>";
if(playlist->currentIndex()<0)
{
playlist->setCurrentIndex(0);
qDebug()<<">>>检查播放器下一首按钮失败!!!!";
return ;
}
playlist->setCurrentIndex(playlist->currentIndex()+1);
player->play();
btnPlay->setText("暂停");
btnPlay->setIcon(QIcon(":/images/pause.png"));
playPause =false;
btnStop->setFlat(true);
qDebug()<<">>>检查播放器下一首按钮成功!!";
}
//声音状态
void MainWindow::on_btnSound_clicked()
{
qDebug()<<">>>检查播放器声音/静音按钮中>>>";
// mute =player->isMuted();
if(mute)
{
btnSound->setIcon(QIcon(":/images/mute.png"));
player->setVolume(0);
btnSound->setText(QString::number(0));
sliderPosition->setValue(0);
mute=false;
qDebug()<<"当前执行为静音";
}
else
{
btnSound->setIcon(QIcon(":/images/sound.png"));
player->setVolume(50);
btnSound->setText(QString::number(50));
sliderPosition->setValue(50);
mute =player->isMuted();
mute=true;
qDebug()<<"当前执行为声音";
}
qDebug()<<">>>检查播放器声音/静音按钮成功!!!";
有很多笔记和调试过程代码也在里面,觉得多余就忽略吧。没有太多时间就耗在这个文件布局里面了,我也是为了以后忘记能快速找到相关信息,毕竟放在这里也不占着自己的电脑内存
输出大概样子就是这样(如下图):
差点忘记了那个音乐播放器标题是在main.cpp函数里面写的
w.setWindowTitle("音乐播放器");
大概就是这么多。那些图标是通过Add new添加的,不要忘记了,不然实现不了上面的效果。
时间有点赶,先这样了,有空回头再修改
后期也会放在个人公众号 “秋后的才华决定你的余生” 上面,
有兴趣可以关注一下。