1、所需头文件
#include <QFileDialog>//打开音乐列表文件夹
#include <QtMultimedia/QMediaPlayer>//播放音乐
2、UI设计
3、播放按钮代码
void Demo1::on_play()
{
if (!path.isEmpty())
{
if (a_play == 0)
{
a_play = 1;
ui.pushButton_3->setStyleSheet(QStringLiteral("border-image: url(:/Demo1/Resources/icon/播放切换键.png);"));
int index = ui.listWidget->currentRow();//获取当前选中的行号
ui.listWidget->setCurrentRow(index);
if (player->isAudioAvailable())//检查音频是否可用
{
player->play();//继续播放
}
else
{
QFileInfo m_Info(path);
QString str_name = m_Info.absoluteFilePath();//获取路径
QDir dir(path);
QStringList mNames = dir.entryList(QDir::Files);
str_name = str_name + "/" + mNames[index];
qDebug() << str_name;
player->setMedia(QUrl::fromLocalFile(str_name));
//player->setVolume(20); //0~100音量范围,默认是100
player->play();
}
}
else
{
a_play = 0;
ui.pushButton_3->setStyleSheet(QStringLiteral("border-image:url(:/Demo1/Resources/icon/播放键.png);"));
player->pause();//暂停
}
}
else
{
return;
}
}
4、上一首代码块
void Demo1::on_left()
{
int index = ui.listWidget->currentRow();//获取当前选中的行号
if (index >= 1)
{
index = index - 1;
}
ui.listWidget->setCurrentRow(index);
if (path.isEmpty())
{
return;
}
QFileInfo m_Info(path);
QString str_name = m_Info.absoluteFilePath();//获取路径
QDir dir(path);
QStringList mNames = dir.entryList(QDir::Files);
str_name = str_name + "/" + mNames[index];
qDebug() << str_name;
player->setMedia(QUrl::fromLocalFile(str_name));
//player->setVolume(20); //0~100音量范围,默认是100
player->play();
}
5、下一首播放代码块
void Demo1::on_right()
{
int index = ui.listWidget->currentRow();//获取当前选中的行号
qDebug() << ui.listWidget->count();
if (index < ui.listWidget->count()-1)
{
index = index + 1;
}
ui.listWidget->setCurrentRow(index);
if (path.isEmpty())
{
return;
}
QFileInfo m_Info(path);
QString str_name = m_Info.absoluteFilePath();//获取路径
QDir dir(path);
QStringList mNames = dir.entryList(QDir::Files);
str_name = str_name + "/" + mNames[index];
qDebug() << str_name;
player->setMedia(QUrl::fromLocalFile(str_name));
//player->setVolume(20); //0~100音量范围,默认是100
player->play();
}
4、音乐列表获取代码
void Demo1::on_list()
{
path = QFileDialog::getExistingDirectory(NULL, QStringLiteral("请选择文件所在目录"), "./");
QDir dir(path);
qDebug() << path;
QStringList mNames = dir.entryList(QDir::Files);
ui.listWidget->addItems(mNames);
ui.listWidget->setCurrentRow(0);
}
5、滑动条与播放时长连接代码
void Demo1::setSound(qint64)
{
qint64 m_duration;
m_duration = player->duration();
ui.slider->setMaximum(m_duration);
int secound = m_duration / 1000;
int min = secound / 60;
secound = secound % 60;
durationtime = QString("%1:%2").arg(min).arg(secound);
ui.label->setText(durationtime);
}
void Demo1::onPositionChanged(qint64 m_position)
{
ui.slider->setSliderPosition(m_position);//根据当前时长设置滑动条位置-实时移动
}
6、滑动条与音量连接代码
void Demo1::on_vulme()
{
if (!m_vulme)
{
m_vulme = true;
ui.pushButton_5->setStyleSheet(QStringLiteral("border-image:url(:/Demo1/Resources/icon/静音.png);"));
player->setVolume(0);
ui.label_2->setText(QString::number(0));
ui.verticalSlider->setValue(0);
}
else
{
m_vulme = false;
ui.pushButton_5->setStyleSheet(QStringLiteral("border-image:url(:/Demo1/Resources/icon/音量.png);"));
player->setVolume(m_value);
ui.label_2->setText(QString::number(m_value));
ui.verticalSlider->setValue(m_value);
}
}
void Demo1::on_vulme(int value)
{
ui.label_2->setText(QString::number(value));
player->setVolume(value);
m_value = value;
}
7、效果图
8、背景图设计代码
//设置背景图片
QPixmap Images(QStringLiteral(":/Demo1/Resources/icon/背景.png"));
QPalette Palette = this->palette();
Palette.setBrush(QPalette::Background, Images);
this->setPalette(Palette);
ui.listWidget->setStyleSheet("background-color:rgb(255,255,255,0)");//设置背景透明
9、窗口初始化函数
void Demo1::Init()
{
player = new QMediaPlayer;
player->setVolume(20);
connect(ui.pushButton, SIGNAL(clicked()), this, SLOT(on_list()));
connect(ui.pushButton_3, SIGNAL(clicked()), this, SLOT(on_play()));
connect(ui.pushButton_2, SIGNAL(clicked()), this, SLOT(on_left()));
connect(ui.pushButton_4, SIGNAL(clicked()), this, SLOT(on_right()));
connect(player, SIGNAL(durationChanged(qint64)), this, SLOT(setSound(qint64)));
connect(player, SIGNAL(positionChanged(qint64)), this, SLOT(onPositionChanged(qint64)));
connect(ui.pushButton_5, SIGNAL(clicked()), this, SLOT(on_vulme()));
connect(ui.verticalSlider, SIGNAL(sliderMoved(int)), this, SLOT(on_vulme(int)));
ui.pushButton_3->setStyleSheet(QStringLiteral("border-image:url(:/Demo1/Resources/icon/播放键.png);"));
ui.label->setStyleSheet("color:white");//设置字体颜色
ui.label_2->setStyleSheet("color:white");
ui.label_2->setText(QString::number(20));
//ui.horizontalSlider->setRange(0, 100);//设置滑动条范围
//ui.horizontalSlider->setPageStep(5);//设置滑动条步长
ui.verticalSlider->setRange(0,100);
ui.verticalSlider->setValue(20);
//设置背景图片
QPixmap Images(QStringLiteral(":/Demo1/Resources/icon/背景.png"));
QPalette Palette = this->palette();
Palette.setBrush(QPalette::Background, Images);
this->setPalette(Palette);
ui.listWidget->setStyleSheet("background-color:rgb(255,255,255,0)");//设置背景透明
}