#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtWidgets>
#include <QMediaPlayer>
#include <QMediaPlaylist>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
createContextMenu();
playList=new QMediaPlaylist;
playList->setPlaybackMode(QMediaPlaylist::Loop);
player=new QMediaPlayer;
player->setPlaylist(playList);
player->setVolume(volume);
connect(ui->horizontalSlider, SIGNAL(sliderMoved(int)), this, SLOT(setPosition(int)));
connect(ui->tableWidget, SIGNAL(cellClicked(int,int)), this, SLOT(playTo(int,int)));
connect(player, SIGNAL(positionChanged(qint64)), this, SLOT(positionChanged(qint64)));
connect(player, SIGNAL(durationChanged(qint64)), this, SLOT(durationChanged(qint64)));
connect(playList, SIGNAL(currentIndexChanged(int)), this, SLOT(updateSongList(int)));
connect(ui->action_SongList, SIGNAL(triggered()), this, SLOT(showOrHideSongList()));
connect(ui->action_Import, SIGNAL(triggered()), this, SLOT(importSongs()));
connect(ui->action_deleteSelectedMusic, SIGNAL(triggered()), this, SLOT(deleteSelectedMusic()));
connect(ui->action_Last, SIGNAL(triggered()), this, SLOT(playLast()));
connect(ui->action_Play, SIGNAL(triggered()), this, SLOT(playOrPause()));
connect(ui->action_Stop, SIGNAL(triggered()), player, SLOT(stop()));
connect(ui->action_Next, SIGNAL(triggered()), this, SLOT(playNext()));
connect(ui->action_SoundPlus, SIGNAL(triggered()), this, SLOT(plusSound()));
connect(ui->action_SoundReduce, SIGNAL(triggered()), this, SLOT(reduceSound()));
connect(ui->toolButton_Play, SIGNAL(clicked()), this, SLOT(playOrPause()));
connect(ui->toolButton_Stop, SIGNAL(clicked()), player, SLOT(stop()));
connect(ui->toolButton_Last, SIGNAL(clicked()), this, SLOT(playLast()));
connect(ui->toolButton_Next, SIGNAL(clicked()), this, SLOT(playNext()));
connect(ui->toolButton_SoundPlus,SIGNAL(clicked()),this,SLOT(plusSound()));
connect(ui->toolButton_SoundReduce,SIGNAL(clicked()),this,SLOT(reduceSound()));
connect(ui->toolButton_ImportSongs,SIGNAL(clicked()),this,SLOT(importSongs()));
connect(ui->toolButton_support,SIGNAL(clicked()),this,SLOT(support()));
connect(ui->toolButton_deleteSelectedMusic,SIGNAL(clicked()),this,SLOT(deleteSelectedMusic()));
connect(ui->horizontalSlider_2, SIGNAL(sliderMoved(int)), this, SLOT(volumeStatusChange()));
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::createContextMenu()
{
seperatorAction1=new QAction(this);
seperatorAction1->setSeparator(true);
seperatorAction2=new QAction(this);
seperatorAction2->setSeparator(true);
addAction(ui->action_SongList);
addAction(ui->action_Import);
addAction(ui->action_deleteSelectedMusic);
addAction(seperatorAction1);
addAction(ui->action_Last);
addAction(ui->action_Play);
addAction(ui->action_Stop);
addAction(ui->action_Next);
addAction(seperatorAction2);
addAction(ui->action_SoundPlus);
addAction(ui->action_SoundReduce);
setContextMenuPolicy(Qt::ActionsContextMenu);
}
void MainWindow::mousePressEvent(QMouseEvent *event)
{
if(event->button()==Qt::LeftButton) {
dragPos=event->globalPos()-frameGeometry().topLeft();
event->accept();
}
}
void MainWindow::mouseMoveEvent(QMouseEvent *event)//左键移动
{
if(event->buttons()&Qt::LeftButton) {
move(event->globalPos()-dragPos);
event->accept();
}
}
void MainWindow::positionChanged(qint64 position)
{
ui->horizontalSlider->setValue(position);
currentTime=new QTime(0,(position/60000)%60,(position/1000)%60);
QString str =currentTime->toString("mm:ss")+"/"+totalTime->toString("mm:ss");
ui->timeLabel->setText(str);
}
void MainWindow::durationChanged(qint64 duration)
{
ui->horizontalSlider->setRange(0,duration);
totalTime=new QTime(0,(duration/60000)%60,(duration/1000)%60);
}
void MainWindow::updateSongList(int i)//正在播放
{
ui->tableWidget->selectRow(i);
ui->label->setText(tr("正在播放: %1").arg(ui->tableWidget->item(i, 0)->text()));
ui->timeLabel->setText(tr("00:00") + "/" + tr("00:00"));
ui->timeLabel->setAlignment(Qt::AlignCenter);
}
void MainWindow::showOrHideSongList()//显示播放列表
{
setAttribute(Qt::WA_TranslucentBackground);
if(ui->tableWidget->isHidden()) {
ui->tableWidget->show();
} else {
ui->tableWidget->hide();
}
}
void MainWindow::playTo(int i,int )
{
playList->setCurrentIndex(i);
player->play();
}
void MainWindow::importSongs()//导入歌曲
{
QString initialName=QDir::homePath();
QStringList pathList=QFileDialog::getOpenFileNames(this, tr("选择文件"), initialName, tr("*.mp3"));
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();
int rownum=ui->tableWidget->rowCount();
ui->tableWidget->insertRow(rownum);
ui->tableWidget->setItem(rownum, 0, new QTableWidgetItem(fileName.split(".").front()));
}
}
}
void MainWindow::deleteSelectedMusic()//删除播放列表歌曲
{
QTableWidgetItem * item = ui->tableWidget->currentItem();
if (item == Q_NULLPTR)return;
playList->removeMedia(ui->tableWidget->currentRow());
ui->tableWidget->removeRow(item->row());
//emit isModified();
//emit playlistReduced();
}
void MainWindow::playLast()//播放
{
int currentIndex=playList->currentIndex();
if(--currentIndex<0) currentIndex=0;
playList->setCurrentIndex(currentIndex);
player->play();
}
void MainWindow::playOrPause()//暂停
{
if(ui->toolButton_Play->text()==tr("播放")) {
player->play();
ui->toolButton_Play->setText(tr("暂停"));
} else {
player->pause();
ui->toolButton_Play->setText(tr("播放"));
}
}
void MainWindow::playNext()//下一首
{
int currentIndex=playList->currentIndex();
if(++currentIndex==playList->mediaCount()) currentIndex=0;
playList->setCurrentIndex(currentIndex);
player->play();
}
void MainWindow::plusSound()//增大音量
{
volume+=20;
if(volume>=100) {
volume=100;
ui->action_SoundPlus->setEnabled(false);
}
player->setVolume(volume);
if(!ui->action_SoundReduce->isEnabled())
ui->action_SoundReduce->setEnabled(true);
}
void MainWindow::reduceSound()//减小音量
{
volume-=20;
if(volume<=0) {
volume=0;
ui->action_SoundReduce->setEnabled(false);
}
player->setVolume(volume);
if(!ui->action_SoundPlus->isEnabled())
ui->action_SoundPlus->setEnabled(true);
}
void MainWindow::setPosition(int position)
{
player->setPosition(position);
}
void MainWindow::volumeStatusChange()
{
if (player->isMuted()){
player->setMuted(false);
}
else
{
player->setMuted(true);
}
}
void MainWindow::support()
{
QMessageBox::about(this, tr("关于"), tr("感谢您使用宇宙听听! 制作人:李丞"));
}