功能已实现:播放,上一曲,下一曲。
mymusic.h
#ifndef MYMUSIC_H
#define MYMUSIC_H
#include <QWidget>
#include<QStyleOption>
#include<QPainter>
#include<QDir>
#include<QListWidgetItem>
#include<QMediaPlayer>
namespace Ui {
class myMusic;
}
class myMusic : public QWidget
{
Q_OBJECT
public:
explicit myMusic(QWidget *parent = 0);
~myMusic();
private:
Ui::myMusic *ui;
private:
QString str_pathmusic;
QListWidgetItem *p_item;
bool b_play_music=false;
QMediaPlayer * p_player;
QString str_music;
int n_music_number;
private slots:
void slot_upperbtn_clicked();
void slot_playbtn_clicked();
void slot_downbtn_clicked();
void slot_musicListRowNum(int);
private:
void paintEvent(QPaintEvent *event);
void readFile();
void initUI();
};
#endif
main.cpp
#include "mymusic.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
myMusic w;
w.show();
return a.exec();
}
mymusic.cpp
#include "mymusic.h"
#include "ui_mymusic.h"
#include<QDebug>
myMusic::myMusic(QWidget *parent) :
QWidget(parent),
ui(new Ui::myMusic)
{
ui->setupUi(this);
initUI();
readFile();
this->setWindowIcon(QIcon(":/picture/logo.webp"));
}
myMusic::~myMusic()
{
delete ui;
}
void myMusic::readFile(){
str_pathmusic="D:/music_download";
QDir dir(str_pathmusic);
QStringList nameFileters;
nameFileters<<"*.mp3";
QStringList files =dir.entryList(nameFileters,QDir::Files|QDir::Readable,QDir::Name);
ui->listWidget->addItems(files);
ui->listWidget->sortItems();
p_item=ui->listWidget->item(0);
p_item->setSelected(true);
}
void myMusic::slot_musicListRowNum(int n_number)
{
qDebug()<<n_number<<endl;
qDebug()<<ui->listWidget->item(n_number)->text()<<endl;
str_music=ui->listWidget->item(n_number)->text();
p_player=new QMediaPlayer;
p_player->setMedia(QUrl::fromLocalFile(str_pathmusic+'/'+str_music));
p_player->setVolume(60);
p_player->stop();
n_music_number=n_number;
}
void myMusic::initUI(){
connect(ui->upperbtn,SIGNAL(clicked(bool)),this,SLOT(slot_upperbtn_clicked()));
connect(ui->playbtn,SIGNAL(clicked(bool)),this,SLOT(slot_playbtn_clicked()));
connect(ui->downbtn,SIGNAL(clicked(bool)),this,SLOT(slot_downbtn_clicked()));
connect(ui->listWidget,SIGNAL(currentRowChanged(int)),this,SLOT(slot_musicListRowNum(int)));
}
void myMusic::paintEvent(QPaintEvent *){
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget,&opt,&p,this);
}
void myMusic::slot_upperbtn_clicked()
{
qDebug()<<"上一曲";
p_player->stop();
if(n_music_number==0)
{
int nMax=ui->listWidget->count();
str_music=ui->listWidget->item(nMax-1)->text();
p_item=ui->listWidget->item(nMax-1);
p_item->setSelected(true);
QString str=str_pathmusic+'/'+str_music;
p_player->setMedia(QUrl::fromLocalFile(str));
p_player->setVolume(60);
p_player->play();
n_music_number=nMax-1;
}
str_music=ui->listWidget->item(n_music_number-1)->text();
p_item=ui->listWidget->item(n_music_number-1);
p_item->setSelected(true);
QString str=str_pathmusic+'/'+str_music;
p_player->setMedia(QUrl::fromLocalFile(str));
p_player->setVolume(60);
p_player->play();
n_music_number=n_music_number-1;
}
void myMusic::slot_playbtn_clicked()
{
if(b_play_music)
{
ui->playbtn->setStyleSheet("QPushButton#playbtn{border-image: url(:/picture/stop.png);}");
b_play_music=false;
p_player->pause();
qDebug()<<"暂停";
}
else
{
ui->playbtn->setStyleSheet("QPushButton#playbtn{border-image: url(:/picture/begin.png);}");
b_play_music=true;
p_player->play();
qDebug()<<"播放";
}
}
void myMusic::slot_downbtn_clicked()
{
qDebug()<<"下一曲";
int nMax=ui->listWidget->count();
p_player->stop();
if(n_music_number==nMax-1)
{
str_music=ui->listWidget->item(0)->text();
p_item=ui->listWidget->item(0);
p_item->setSelected(true);
QString str=str_pathmusic+'/'+str_music;
p_player->setMedia(QUrl::fromLocalFile(str));
p_player->setVolume(60);
p_player->play();
n_music_number=-1;
}
str_music=ui->listWidget->item(n_music_number+1)->text();
p_item=ui->listWidget->item(n_music_number+1);
p_item->setSelected(true);
QString str=str_pathmusic+'/'+str_music;
p_player->setMedia(QUrl::fromLocalFile(str));
p_player->setVolume(60);
p_player->play();
n_music_number=n_music_number+1;
}
效果图
![在这里插入图片描述](https://img-blog.csdnimg.cn/d10c3f1de3d44571a25024e1c21d98da.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5Y2K5pyI5pap,size_20,color_FFFFFF,t_70,g_se,x_16)