qt音乐播放器

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);
}

在这里插入图片描述
超级丑,哈哈哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值