基于QT实现简单音乐播放器

接触了QT就简单写了一个音乐播放器 能实现简单的 播放 上下曲 播放 暂停 时间进度展示 声音控制 歌曲列表的添加等一些基本的功能 探索的世界还很长 望多多指教。
.h文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include #include

#include #include #include #include

#include #include #include #include #include

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void addFile();//添加歌曲文件
void PlaySong();//播放歌曲
void StopSong();//停止播放
void PuaseSong();//暂停播放
void Next_Song();//下一曲播放
void Last_Song();//上一曲播放
void volumChange(int);//声音控制滑动条
void positionChange(qint64 position);//歌曲播放控制进度条
void seekChange(int position);
// void showMessage(bool yn);

private:
QHBoxLayout *hbox;//水平布局
QHBoxLayout *hbox1;
QHBoxLayout *hbox2;
QVBoxLayout *vbox1;
QVBoxLayout *vbox;//垂直布局
QSlider *seekSlider;//进度条
QLabel *lab;//标签
QLabel *lab1;//标签
QLabel *message;
QLabel *showPro;
QLabel *Vol;//声音图标
QPushButton *Play;//播放按钮
QPushButton *Next;//下一曲播放按钮
QPushButton *Last;//上一曲
QPushButton *Puase;//暂停按钮
QPushButton *Open;//打开文件按钮
QPushButton *Stop;//停止按钮
QPushButton *Vl;

QTextEdit *Ted;//播放界面框
QWidget * CenterWindow;//定义一个Qwidget
QMediaPlayer *Music;//初始化音乐
QMediaPlaylist *PlayList;//初始化播放列表
QSlider     *volumeControl;
int         moved;
bool        yn;
QPoint      dragPosition;
//QLineEdit *led;//显示正在播放歌曲文本框

};

#endif // MAINWINDOW_H

//.cpp文件
#include “mainwindow.h”
#include

MainWindow::MainWindow(QWidget *parent)
QMainWindow(parent)
{
//设置主窗口背景
QPixmap pixmap(":/icon/1.jpg");
QPalette palette=this->palette();
palette.setBrush(QPalette::Background,QBrush(pixmap));
this->setPalette(palette);

// this->setFixedSize(600,400);//设置主窗口大小
this->setWindowTitle(“酷酷音乐播放器”);
this->setWindowIcon(QIcon(":/icon/2.jpg"));

CenterWindow = new QWidget;//定义一个Qwidget
this->setCentralWidget(CenterWindow);

hbox = new QHBoxLayout;//水平布局
hbox1 = new QHBoxLayout;
hbox2 = new QHBoxLayout;
vbox = new QVBoxLayout;//垂直布局

seekSlider = new QSlider(Qt::Horizontal,this);//QSlider(Qt::Horizontal,this)创建一个水平方向的滑动条QSlider控件
seekSlider -> setGeometry(100,345,200,15);
seekSlider->setObjectName(tr("seekSlider"));
seekSlider -> setCursor(QCursor(Qt::PointingHandCursor));

lab = new QLabel;//标签
Vol = new QLabel;
lab1 = new QLabel;

Play = new QPushButton;//播放按钮
Play->setIcon(QIcon(":/icon/5.png"));//设置播放按钮图标
Play->setIconSize(QSize(30,30));//设置图标图片大小
Play->setFixedSize(QSize(30,30));//设置按钮大小


Next = new QPushButton;//下一曲播放按钮
Next->setIcon(QIcon(":/icon/4.png"));
Next->setIconSize(QSize(30,30));
Next->setFixedSize(QSize(30,30));

Last = new QPushButton;//上一曲播放按钮
Last->setIcon(QIcon(":/icon/3.png"));
Last->setIconSize(QSize(30,30));
Last->setFixedSize(QSize(30,30));

Puase = new QPushButton;//暂停按钮
Puase->setIcon(QIcon(":/icon/6.png"));
Puase->setIconSize(QSize(30,30));//设置图标图片大小
Puase->setFixedSize(QSize(30,30));//设置按钮大小

Vl = new QPushButton;//播放按钮
Vl->setIcon(QIcon(":/icon/vo.png"));//设置播放按钮图标
Vl->setIconSize(QSize(15,15));//设置图标图片大小
Vl->setFixedSize(QSize(15,15));//设置按钮大小

message = new QLabel(this);

Open = new QPushButton;//添加文件按钮
Open->setIcon(QIcon(":/icon/2.jpg"));
Open->setIconSize(QSize(30,30));
Open->setFixedSize(QSize(30,30));

showPro = new QLabel;
showPro -> setGeometry(35,340,50,20);
showPro -> setFont(QFont("Times",10,QFont::Bold));
//showPro -> setPalette(pac);
QTime mov(0,0,0);
showPro ->setText(mov.toString("mm:ss"));


Stop = new QPushButton;//停止按钮
Stop->setIcon(QIcon(":/icon/7.png"));
Stop->setIconSize(QSize(30,30));//设置图标图片大小
Stop->setFixedSize(QSize(30,30));//设置按钮大小

Ted = new QTextEdit;//播放列表界面
//Ted.setStyleSheet(":/icon/1.jpg")

volumeControl=new QSlider(Qt::Horizontal,this);//QSlider(Qt::Vertical,this)创建一个竖直方向的滑动条QSlider控件
volumeControl->setObjectName(tr("volumeControl"));
volumeControl->setGeometry(375,240,15,80);
volumeControl->setCursor(QCursor(Qt::PointingHandCursor));
volumeControl->setRange(0,100);//设置滑动条控件的最小值和最大值
volumeControl ->setValue(50);//设置初值为50;




hbox->addWidget(Last);//将上一曲进行水平布局
hbox->addWidget(Play);//将播放按钮进行水平布局
hbox->addWidget(Next);//将下一曲进行水平布局


hbox1->addWidget(lab);
hbox1->addWidget(lab1);

hbox2->addWidget(Open);//将添加歌曲按钮进行水平布局

hbox2->addWidget(Puase);//将暂停按钮进行水平布局
hbox2->addWidget(Stop);
//hbox2->addWidget(Vol);
hbox2->addWidget(Vl);
hbox2->addWidget(volumeControl);

vbox->addWidget(Ted);//播放界面进行垂直布局
vbox->addWidget(seekSlider);//将进度条垂直布局
vbox->addWidget(showPro);
vbox->addLayout(hbox1);

vbox->addLayout(hbox);
vbox->addLayout(hbox2);

CenterWindow->setLayout(vbox);

Music = new QMediaPlayer(this);//QMediaplayer用于解析音频文件和视频文件
PlayList = new QMediaPlaylist(this);
moved = 0;
yn = true;

connect(this->Open,SIGNAL(clicked()),this,SLOT(addFile()));
connect(this->Play,SIGNAL(clicked()),this,SLOT(PlaySong()));
connect(this->Puase,SIGNAL(clicked()),this,SLOT(PuaseSong()));
connect(this->Stop,SIGNAL(clicked()),this,SLOT(StopSong()));
connect(this->Next,SIGNAL(clicked()),this,SLOT(Next_Song()));
connect(this->Last,SIGNAL(clicked()),this,SLOT(Last_Song()));    
connect(volumeControl, SIGNAL(sliderMoved(int)), this, SLOT(volumChange(int)));

connect(Music,SIGNAL(positionChanged(qint64)),this,SLOT( positionChange(qint64)));
//connect(Music,SIGNAL(positionChanged(qint64)),this,SLOT(setPosion()));

}

//添加播放列表
void MainWindow::addFile()
{

QString songFileName,songName;
QFileInfo info;
QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("打开文件"),"",tr("music(*.mp3)"));

// qDebug()<

for(int i = 0; i < fileNames.size(); i ++)
{
    PlayList -> addMedia(QUrl::fromLocalFile(fileNames.at(i)));//将音乐文件逐一加入到播放列表
    songFileName = fileNames.at(i);
    info = QFileInfo(songFileName);
    songName = info.fileName();
    Ted ->append(songName);//添加歌曲名到界面的歌曲列表
    //message -> setText(tr("添加成功"));

}
Music->setPlaylist(PlayList);

}
//播放音乐
void MainWindow::PlaySong()
{
//设置音量
Music->setVolume(60);
//播放音乐
Music->play();
QString name= Music->metaData(QMediaMetaData::Title).toString();
QString author= Music->metaData(QMediaMetaData::Author).toString();
lab -> setText(“正在播放:”+name + " -" + author);

   //QTime  displayTime(0,(player -> duration() / 60000) % 60,(player ->duration() / 1000) % 60);
   //showTime -> setText(displayTime.toString("mm:ss"));

}

//暂停播放
void MainWindow::PuaseSong()
{
Music->pause();
}

//停止播放
void MainWindow::StopSong()
{
Music->stop();
}
//下一曲播放
void MainWindow::Next_Song()
{
int currentIndex = PlayList->currentIndex();
if(++currentIndex == PlayList->mediaCount())
currentIndex=0;
PlayList->setCurrentIndex(currentIndex);

}
//上一曲播放
void MainWindow::Last_Song()
{
PlayList->previous();
Music->play();
}

//关联滑块的移动,设置播放的音量
void MainWindow::volumChange(int vol)
{
Music -> setVolume(vol);
}

void MainWindow::positionChange(qint64 position)
{

seekSlider->setMaximum(Music->duration() / 1000);//设置滑块的长度范围为音乐长.00度
seekSlider->setValue(position / 1000);//如果音乐进度改变,则改变滑块显示位置
moved = position;//让播放时间等于音乐进度(毫秒)
QTime moveTime(0,(moved/60000) % 60,(moved / 1000) % 60);//设置时间
showPro ->setText(moveTime.toString("mm:ss"));//显示时间

}
//滑动滑动条快进、倒退音乐,且音乐已播放时长也跟着变化
void MainWindow::seekChange(int position)
{

Music -> setPosition(position * 1000);//如果滑块改变位置,则改变音乐进度
moved = position * 1000;//让播放时间等于音乐进度(毫秒)
QTime moveTime(0,(moved/60000) % 60,(moved / 1000) % 60);//设置时间
showPro ->setText(moveTime.toString("mm:ss"));//显示时间

}

MainWindow::~MainWindow()
{

}

//main.c文件
#include “mainwindow.h”
#include

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();

}
音乐播放器就这样实现完毕了,如果你觉得太简陋的话,可以重写鼠标右键函数来添加选取某一歌曲播放、删除某一歌曲、删除全部歌曲等等功能,还可以添加歌词显示的功能。

你可能感兴趣的:(QT)