Qt下的音乐播放器
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMediaPlayer>
#include <QFileDialog>
#include <QListWidgetItem>
#include <QTimer>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
void set_path(QString url);
void play_music();
public slots:
void on_voice_size_valueChanged(int value);
private slots:
void on_add_Music_clicked();
void on_listWidget_itemDoubleClicked(QListWidgetItem *item);
void on_del_Music_clicked();
void on_listWidget_currentRowChanged(int currentRow);
void on_play_music_clicked();
void on_del_list_clicked();
void on_play_last_2_clicked();
void on_play_next_clicked();
void on_play_last_clicked();
void on_horizontalSlider_valueChanged(int value);
void on_play_voice_clicked();
void on_horizontalSlider_sliderMoved(int position);
private:
Ui::MainWindow *ui;
QMediaPlayer *player;//音乐播放器对象
int music_it;//返回当前是第几项
bool myMusic;//播放判断
QString path;//双击的路径
QString now_path;//当前路径
int now_row;
QTimer timer;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
//创建多媒体对象
player=new QMediaPlayer;
//音频长度变化响应来更改进度条总时长
connect(player,&QMediaPlayer::positionChanged,ui->horizontalSlider,&QSlider::setValue);
}
MainWindow::~MainWindow()
{
delete ui;
}
//设置歌曲路径
void MainWindow::set_path(QString url)
{
player->setMedia(QUrl::fromLocalFile(url));
}
//播放音乐
void MainWindow::play_music()
{
player->play();
//歌曲总时长
connect(player,&QMediaPlayer::durationChanged,ui->horizontalSlider,&QSlider::setMaximum);
}
//添加音乐
void MainWindow::on_add_Music_clicked()
{
//打开文件对话框
QStringList music_list=QFileDialog::getOpenFileNames();
ui->listWidget->addItems(music_list);
/***如果要想在列表上只显示歌名,就把路径名分解(split)然后单独保存,存入列表***/
}
//双击歌曲名
void MainWindow::on_listWidget_itemDoubleClicked(QListWidgetItem *item)
{
//双击时,获取项的文本
set_path(item->text());
path=item->text();
play_music();
}
//删除某一行歌曲
void MainWindow::on_del_Music_clicked()
{
QListWidgetItem *item=ui->listWidget->takeItem(music_it);
ui->listWidget->removeItemWidget(item);
if(item==ui->listWidget->currentItem());
{
player->stop();
}
delete item;
}
//返回当前选择的列表行数
void MainWindow::on_listWidget_currentRowChanged(int currentRow)
{
music_it=currentRow;
}
//播放和暂停
void MainWindow::on_play_music_clicked()
{
if(QMediaPlayer::PlayingState==player->state()&&path==ui->listWidget->currentItem()->text())//判断是否为打开状态
{
player->pause();
}
else //如果音乐打开,再次点击则暂停
{
set_path(ui->listWidget->currentItem()->text());
play_music();
now_path=ui->listWidget->currentItem()->text();
}
}
//清空列表
void MainWindow::on_del_list_clicked()
{
ui->listWidget->clear();
}
//音量大小
void MainWindow::on_voice_size_valueChanged(int value)
{
player->setVolume(value);
}
//停止
void MainWindow::on_play_last_2_clicked()
{
player->stop();
}
//下一首
void MainWindow::on_play_next_clicked()
{
now_row=ui->listWidget->currentRow();//获取当前行数
now_row++;
if(now_row>=ui->listWidget->count())//如果到达最大值则从第一行开始
now_row=0;
QListWidgetItem *item=ui->listWidget->item(now_row);
ui->listWidget->setCurrentRow(now_row);
set_path(item->text());
play_music();
}
//上一首
void MainWindow::on_play_last_clicked()
{
now_row=ui->listWidget->currentRow();
now_row--;
if(now_row==-1)
now_row=ui->listWidget->count()-1;
QListWidgetItem *item=ui->listWidget->item(now_row);
ui->listWidget->setCurrentRow(now_row);
set_path(item->text());
play_music();
}
//实时响应滑块的位置,并与歌曲同步
void MainWindow::on_horizontalSlider_valueChanged(int value)
{
if(value==ui->horizontalSlider->maximum())//如果滑块到达最大值,播放下一首歌
{
now_row=ui->listWidget->currentRow();
now_row++;
if(now_row>=ui->listWidget->count())
now_row=0;
QListWidgetItem *item=ui->listWidget->item(now_row);
ui->listWidget->setCurrentRow(now_row);
set_path(item->text());
play_music();
}
}
//播放静音
void MainWindow::on_play_voice_clicked()//没权限
{
qDebug()<<"静音没权限";
if(player->isMuted())//如果为静音返回值为true
player->setMuted(true);
else if(!player->isMuted()){
player->setMuted(false);
}
}
//滑块移动歌曲时间跟着移动
void MainWindow::on_horizontalSlider_sliderMoved(int position)
{
player->setPosition(position);
}
超级丑,哈哈哈。