#include "m_player.h"
#include "ui_m_player.h"
#include <QFileDialog>
#include <QFileInfo>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QDebug>
#include <QUrl>
#include "widgetvolume.h"
m_player::m_player(QWidget *parent) :
QWidget(parent),
ui(new Ui::m_player)
{
ui->setupUi(this);
Init();
}
m_player::~m_player()
{
delete ui;
}
//初始化
void m_player::Init()
{
playList=new QMediaPlaylist;
playList->setPlaybackMode(QMediaPlaylist::Loop);
player=new QMediaPlayer;
player->setPlaylist(playList);
m_pwidgetvolume = new WidgetVolume;
slot_CreatContextMenu();
connect(ui->horizontalSlider,SIGNAL(sliderMoved(int)),this,SLOT(slot_setPosition(int) ) );
connect(player,SIGNAL(positionChanged(qint64)),this,SLOT(slot_positionChanged(qint64)));
connect(player,SIGNAL(durationChanged(qint64)),this,SLOT(slot_durationChanged(qint64)));
connect(player,SIGNAL(stateChanged(QMediaPlayer::State)),this,SLOT(slot_player_stateChanged(QMediaPlayer::State) ) );
connect(playList,SIGNAL(currentIndexChanged(int)),this,SLOT(slot_updateList(int )));
}
//时间事件
void m_player::timerEvent(QTimerEvent *event)
{
if( timerID == event->timerId() )
{
int value = ui->horizontalSlider->value() + 1;
ui->horizontalSlider->setValue( value );
if( value == ui->horizontalSlider->maximum() )
{
killTimer( timerID );
}
}
}
//选择打开文件
void m_player::on_pushButton_clicked()
{
QString initialName=QDir::homePath();
QStringList pathList=QFileDialog::getOpenFileNames(this, tr("选择文件"), initialName, tr("*.mp3","*wmv"));
for(int i=0; i<pathList.size(); ++i)
{
QString path=QDir::toNativeSeparators(pathList.at(i));
if(!path.isEmpty())
{
playList->addMedia(QUrl::fromLocalFile(path));
QString fileName=path.split("\\").last();
ui->listWidget->addItem(fileName);
}
}
}
//播放
void m_player::slot_playMusic(QString FilePath)
{
playList->setCurrentIndex(ui->listWidget->currentIndex().row());
player->play();
}
//双击自动播放
void m_player::on_listWidget_doubleClicked(const QModelIndex &index)
{
ui->label->setText( ui->listWidget->currentItem()->text() );
qDebug()<<ui->listWidget->currentIndex().row();
playList->setCurrentIndex( ui->listWidget->currentIndex().row() );
player->play();
ui->btn_start->setText(tr("PASUE") );
}
//调节音量,暂未实现
void m_player::on_pushButton_2_clicked()
{
if(ui->pushButton_2->isChecked() )
{
m_pwidgetvolume->show();
m_pwidgetvolume->move(this->rect().width()-30,this->rect().height()-60);
}
else
{
if(m_pwidgetvolume != NULL)
{
m_pwidgetvolume->hide();
}
}
}
//调节快进后,音乐播放也快进
void m_player::slot_setPosition(int value)
{
player->setPosition(value);
}
//调节快进
void m_player::slot_positionChanged(qint64 position)
{
ui->horizontalSlider->setValue(position);
}
//获取歌曲的长度,并设置长度
void m_player::slot_durationChanged(qint64 duration)
{
ui->horizontalSlider->setRange(0,duration);
}
//播放或者暂停
void m_player::on_btn_start_clicked()
{
switch (player->state())
{
case QMediaPlayer::PlayingState:
player->pause();
break;
default:
player->play();
break;
}
}
//播放状态的改变
void m_player::slot_player_stateChanged(QMediaPlayer::State state)
{
switch (state)
{
case QMediaPlayer::PlayingState:
ui->btn_start->setText("pause");
break;
default:
ui->btn_start->setText("play");
break;
}
}
//创建右键菜单,选择播放模式
void m_player::slot_CreatContextMenu()
{
m_pContextMenu = new QAction(this);
m_pContextMenu->setSeparator(true);
addAction( ui->m_pActionCurrentItemInLoop);
addAction(ui->m_pActionLoop);
addAction(ui->m_pActionRandom);
addAction(ui->m_pActionSequential);
setContextMenuPolicy(Qt::ActionsContextMenu);
}
void m_player::on_m_pActionLoop_triggered()
{
playList->setPlaybackMode(QMediaPlaylist::Loop);
}
void m_player::on_m_pActionCurrentItemInLoop_triggered()
{
playList->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop);
}
void m_player::on_m_pActionRandom_triggered()
{
playList->setPlaybackMode(QMediaPlaylist::Random);
}
void m_player::on_m_pActionSequential_triggered()
{
playList->setPlaybackMode(QMediaPlaylist::Sequential);
}
void m_player::on_btn_last_clicked()
{
int currentIndex=playList->currentIndex();
if(--currentIndex<0) currentIndex=0;
playList->setCurrentIndex(currentIndex);
player->play();
}
void m_player::on_btn_next_clicked()
{
int currentIndex=playList->currentIndex();
if(++currentIndex==playList->mediaCount()) currentIndex=0;
playList->setCurrentIndex(currentIndex);
player->play();
}
void m_player::slot_updateList(int value)
{
QListWidgetItem *item = ui->listWidget->item(value);
item->setSelected(true);
ui->label->setText(item->text());
}
- 1
- 2
前往页