基于QT5下Multimedia多媒体模块实现的简易音乐播放器

项目描述:

  1. 该项目使用QT5下的多媒体模块与界面功能实现了简洁的播放界面,歌曲列表,独立歌词字幕,
  2. 具有功能包括:歌曲的循环播放,随机播放,单曲循环,播放/暂停切换,上下曲切换,音量调节,声音的打开与关闭,歌曲进度显示与调节(总时长显示),桌面歌词的显示与关闭,添加本地歌曲。

运行演示

播放模式切换

暂停/播放功能

音量调节与进度调节由于截图无意义就不截图了,还有上下曲切换也不截图了

添加歌曲

更换皮肤

换完后效果图

以及其他的显示

由于是使用QT5写的,所以这里只给出主要.cpp文件代码

#include "musicwidget.h"
#include <QVBoxLayout>
#include <QGridLayout>
#include <QPixmap>
#include <QPalette>
#include <QPainter>
#include <QColor>
#include <QHeaderView>
#include <QToolBar>
#include <QMessageBox>
#include "mylrc.h"
#include <QTextCodec>
#include <QLabel>
#include <QCloseEvent>
#include <QMenu>
#include <QDesktopServices>
#include <QFileDialog>
#include <QFileInfo>
#include <QTime>
#include <QMultimedia>
#include <QDebug>

int i = 0;
int j = 0;
int num = 0;

musicWidget::musicWidget(QWidget *parent)

{
    moved = 0;
    this->setWindowFlags(Qt::FramelessWindowHint);
    //this->setAttribute(Qt::WA_TranslucentBackground);             //背景透明
    this->setWindowIcon(QIcon("://images/icon.png"));
    this->setMaximumSize(650,500);
    this->setMinimumSize(650,500);
    QPixmap pix1("://images/5.png");                                //设置默认皮肤
    pix1=pix1.scaled(this->width(),this->height());                 //皮肤大小与窗口大小一致
    this->setAutoFillBackground(true);
    QPalette palette;                                               //调色板类

    palette.setBrush(QPalette::Background, QBrush(QPixmap(pix1)));  //通过画刷设置颜色(不单一)
    this->setPalette(palette);                                      //把修改好的调色板类应用到窗口

    namelabel = new QLabel;
    namelabel->setMinimumSize(50,30);
    //namelabel->setMaximumSize(100,30);
    timelable = new QLabel;
    timelable->setMinimumSize(50,30);
    timelable->setMaximumSize(100,30);
    toplabel = new QLabel(QString::fromLocal8Bit("muqt音乐播放器----翼飞出品"));
    toplabel->setTextFormat(Qt::RichText);
    toplabel->setOpenExternalLinks(true);
    toplabel->setAlignment(Qt::AlignCenter);
    //timelable->hide();
    //timelable->setToolTip(QString::fromLocal8Bit("音量调节"));

    slider = new QSlider(Qt::Horizontal);                             //进度条
    slider->setValue(0);
    slider->setMaximum(100);

    slider2 = new QSlider(Qt::Horizontal);
    slider2->setValue(50);
    slider2->setMaximum(100);
    slider2->setToolTip(QString::fromLocal8Bit("音量调节"));

    playBtn=new QPushButton(QIcon("://images/play.png"),tr(" "));    //播放键
    playBtn->setMaximumSize(70,30);
    playBtn->setFlat(true);
    playBtn->setShortcut(QKeySequence("s"));
    playBtn->setToolTip(QString::fromLocal8Bit("播放/暂停(s)"));


    tablewidget=new QTableWidget;
    tablewidget->setColumnCount(3);                                 //设置为3列
    tablewidget->horizontalHeader()->setSectionResizeMode(0,QHeaderView::ResizeToContents);
    tablewidget->horizontalHeader()->setSectionResizeMode(1,QHeaderView::ResizeToContents);
    tablewidget->horizontalHeader()->setSectionResizeMode(2,QHeaderView::ResizeToContents);
    tablewidget->setFrameShape(QFrame::NoFrame);                    //设置无边框

    QPalette pale;
    pale.setBrush(QPalette::Base,QColor(255,255,255,0));
    tablewidget->setPalette(pale);


    tablewidget->setSelectionMode(QAbstractItemView::SingleSelection); //  设置选择模式为单选

    tablewidget->setSelectionBehavior(QAbstractItemView::SelectRows);  //  设置每次选一行
    QStringList stringlist;
    stringlist<<QString::fromLocal8Bit("歌手")<<QString::fromLocal8Bit("歌名")<<QString::fromLocal8Bit("格式");

    tablewidget->setHorizontalHeaderLabels(stringlist);                 //设置表头
    tablewidget->verticalHeader()->setVisible(false);                   //设置垂直头不可见
    tablewidget->horizontalHeader()->resizeSection(0,150);              //设置标头第一列宽度为150
    tablewidget->horizontalHeader()->setStretchLastSection(true);       //设置充满表宽度
    tablewidget->horizontalHeader()->setStyleSheet("QHeaderView {background-color:255,255,255,0 } "
                                                  "QHeaderView::section {background-color:255,255,255,0;"
                                                  "color: 255,255,255,0;padding-left: 4px;border: 0px solid 255,255,255,0;}");
                                                                        //设置表头背景色等

    //playstylecombox=new QComboBox;                                      //下拉选择框

    //playstylecombox->addItem(QString::fromLocal8Bit("循环播放"));
    //playstylecombox->addItem(QString::fromLocal8Bit("列表循环"));
    //playstylecombox->addItem(QString::fromLocal8Bit("随机播放"));
    //playstylecombox->addItem(QString::fromLocal8Bit("单曲循环"));
    //playstylecombox->setMaximumSize(110,50);



    trayicon=new QSystemTrayIcon(QIcon("://images/icon.png"));            //关闭按钮
    playlist=new QMediaPlaylist;                                        //播放列表保存文件,路径等
    closeBtn=new QPushButton(QIcon("://images/close.png"),tr(" "));
    closeBtn->setMaximumSize(70,30);
    closeBtn->setFlat(true);
    closeBtn->setShortcut(QKeySequence("c"));
    closeBtn->setToolTip(QString::fromLocal8Bit("关闭(c)"));

    stylechange = new QPushButton(QIcon("://images/danqu.png"),tr(" "));
    stylechange->setMaximumSize(70,30);
    stylechange->setFlat(true);
    stylechange->setShortcut(QKeySequence("c"));
    stylechange->setToolTip(QString::fromLocal8Bit("单曲循环(c)"));
    playlist->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop);

    loudle = new QPushButton(QIcon("://images/traysound1.png"),tr(" "));
    loudle->setMaximumSize(30,30);
    loudle->setFlat(true);
    loudle->setShortcut(QKeySequence("n"));
    loudle->setToolTip(QString::fromLocal8Bit("关闭声音(n)"));
    addmusicBtn=new QPushButton(QIcon("://images/open.png"),tr(" "));
    addmusicBtn->setMaximumSize(100,30);
    addmusicBtn->setFlat(true);
    addmusicBtn->setShortcut(QKeySequence("o"));
    addmusicBtn->setToolTip(QString::fromLocal8Bit("打开文件(o)"));
    stopBtn=new QPushButton(QIcon("://images/stop.png"),tr(" "));
    stopBtn->setMaximumSize(70,30);
    stopBtn->setFlat(true);
    stopBtn->setShortcut(QKeySequence("t"));
    stopBtn->setToolTip(QString::fromLocal8Bit("停止(t)"));
    nextBtn=new QPushButton(QIcon("://images/skipForward.png"),tr(" "));
    nextBtn->setMaximumSize(70,30);
    nextBtn->setMinimumSize(70,30);
    nextBtn->setFlat(true);
    nextBtn->setShortcut(QKeySequence("x"));
    nextBtn->setToolTip(QString::fromLocal8Bit("下一曲(x)"));
    lastBtn=new QPushButton(QIcon("://images/skipBackward.png"),tr(" "));
    lastBtn->setMaximumSize(70,30);
    lastBtn->setFlat(true);
    lastBtn->setShortcut(QKeySequence("l"));
    lastBtn->setToolTip(QString::fromLocal8Bit("上一曲(l)"));


    imageBtn=new QPushButton(QIcon("://images/image.png"),tr(" "));
    imageBtn->setMaximumSize(100,50);
    imageBtn->setFlat(true);
    imageBtn->setToolTip(QString::fromLocal8Bit("换肤"));

    windowminBtn=new QPushButton(QIcon("://images/min.png"),tr(" "));
    windowminBtn->setMaximumSize(100,50);
    windowminBtn->setFlat(true);
    windowminBtn->setShortcut(QKeySequence("m"));
    windowminBtn->setToolTip(QString::fromLocal8Bit("最小化(m)"));
    //windowminBtn->setWindowFlags(Qt::WindowMinimizeButtonHint);

//    QAction *LRCAction = new QAction(tr("LRC"),this);
//    LRCAction->setShortcut(QKeySequence("F2"));
//    LRCAction->setToolTip(QString::fromLocal8Bit("桌面歌词(F2)"));
//    connect(LRCAction,SIGNAL(triggered()),this,SLOT(SetLrcShown()));
    QPushButton *LRCAction = new QPushButton(QIcon("://images/timg.jpg"),tr(" "));
    LRCAction->setMaximumSize(70,30);
    LRCAction->setFlat(true);
    LRCAction->setShortcut(QKeySequence("w"));
    LRCAction->setToolTip(QString::fromLocal8Bit("桌面歌词(w)"));

    QHBoxLayout* layout=new QHBoxLayout;                                //设置控件添加为从左到右
    layout->addWidget(stylechange);
    layout->addWidget(lastBtn);
    layout->addWidget(playBtn);
    layout->addWidget(stopBtn);
    layout->addWidget(nextBtn);
    layout->addWidget(loudle);
    layout->addWidget(slider2);
    layout->addWidget(LRCAction);

    QHBoxLayout* layout2 = new QHBoxLayout;
    layout2->addWidget(addmusicBtn);
    layout2->addWidget(imageBtn);
    layout2->addWidget(windowminBtn);
    layout2->addWidget(closeBtn);
    //layout2->addWidget(playstylecombox);

    QHBoxLayout* layout3 = new QHBoxLayout;
    layout3->addWidget(namelabel);
    layout3->addWidget(timelable);

    QVBoxLayout* v=new QVBoxLayout(this);                               //设置控件添加为从上到下
    v->addLayout(layout2);
    v->addWidget(tablewidget);
    v->addWidget(slider);
    v->addWidget(toplabel);
    v->addLayout(layout3);
    v->addLayout(layout);


    playlist->setPlaybackMode(QMediaPlaylist::Sequential);
    player = new QMediaPlayer;                                          //解析音/视屏文件的类


    player->setPlaylist(playlist);
    player->setVolume(50);

    timer=new QTimer(this);


    //信号和槽
    //connect(timer,SIGNAL(timeout()),this,SLOT(changslider()));
    //connect(playstylecombox,SIGNAL(currentIndexChanged(int)),this,SLOT(changplaystyle(int)));
    //窗口最小化
    connect(windowminBtn,SIGNAL(clicked()),this,SLOT(showMinimized()));
    //换皮肤
    connect(imageBtn,SIGNAL(clicked()),this,SLOT(changimage()));
    //添加文件
    connect(addmusicBtn,SIGNAL(clicked(bool)),this,SLOT(readfile()));
    //停止播放
    connect(stopBtn,SIGNAL(clicked(bool)),this,SLOT(playstop()));
    //暂停/播放
    connect(playBtn,SIGNAL(clicked(bool)),this,SLOT(playstate()));
    //下一曲
    connect(nextBtn,SIGNAL(clicked(bool)),this,SLOT(nextplay()));
    //上一曲
    connect(lastBtn,SIGNAL(clicked(bool)),this,SLOT(lastplay()));
    //关闭
    connect(closeBtn,SIGNAL(clicked(bool)),this,SLOT(close()));
    //播放列表切换歌曲
    connect(tablewidget,SIGNAL(cellDoubleClicked(int,int)),this,SLOT(changplay(int,int)));
    //当前播放歌曲
    connect(playlist,SIGNAL(currentIndexChanged(int)),this,SLOT(updatenamelabel(int)));
    //歌曲切换时进度条归0
    connect(playlist,SIGNAL(currentIndexChanged(int)),this,SLOT(updateslider()));
    //进度切换
    connect(player,SIGNAL(positionChanged(qint64)),this,SLOT( positionChange(qint64)));
    connect(player,SIGNAL(durationChanged(qint64)),this,SLOT(updatatime(qint64 position)));
    connect(player,SIGNAL(stateChanged(QMediaPlayer::State)),this,SLOT(StateChanged(QMediaPlayer::State)));
    //显示歌曲时长与当前进度(时间)
    connect(slider,SIGNAL(sliderMoved(int)),this,SLOT(seekchange(int)));
    //音量调节(进度条)
    connect(slider2,SIGNAL(sliderMoved(int)),this,SLOT(volumchange(int)));
    //静音
    connect(loudle,SIGNAL(clicked()),this,SLOT(meteopen()));
    //切换播放模式
    connect(stylechange,SIGNAL(clicked()),this,SLOT(changstyle()));
    //显示/关闭歌词
    connect(LRCAction,SIGNAL(clicked()),this,SLOT(SetLrcShown()));

    timer->setInterval(1000);
    lrc = new MyLrc(this);
    lrc->show();
//    trayIcon = new QSystemTrayIcon(QIcon("://images/icon.png"),this);
//    trayIcon->setToolTip(QString::fromLocal8Bit("musicplayer"));
//    QMenu *menu = new QMenu;
//    QHBoxLayout* layout4=new QHBoxLayout;
//    layout4->addWidget(lastBtn);
//    layout4->addWidget(playBtn);
//    layout4->addWidget(stopBtn);
//    layout4->addWidget(nextBtn);

//   // menu->add
//   // menu->addSeparator();
//   // menu->addAction(LRCAction);
//   // menu->addSeparator();
//    menu->addAction(QString::fromLocal8Bit("退出"),qApp,SLOT(quit()));
//    trayIcon->setContextMenu(menu);
//    connect(trayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)),
//            this, SLOT(trayIconActivated(QSystemTrayIcon::ActivationReason)));
//    trayIcon->show();
}


musicWidget::~musicWidget()
{

}

//void musicWidget::trayIconActivated(QSystemTrayIcon::ActivationReason activationReason)
//{
//    if(activationReason == QSystemTrayIcon::Trigger)
//    {
//        show();
//    }
//}

//void musicWidget::closeEvent(QCloseEvent *event)
//{
//    if(isVisible())
//    {
//        hide();
//        trayIcon->showMessage(QString::fromLocal8Bit("music音乐播放器"),QString::fromLocal8Bit("点我显示界面"));
//        event->ignore();
//    }
//}

void musicWidget::SetLrcShown()
{
//    if(lrc->isHidden())
//        lrc->show();
//    else
//        lrc->hide();
    static int l = 0;
    if(++l == 1)
    {
        lrc->hide();
        l = 1;
    }
    else
    {
        lrc->show();
        l = 0;
    }
}

void musicWidget::StateChanged(QMediaPlayer::State new_state)
{
    //lrc->setText(tr("123456778"));
    switch(new_state)
    {
        case QMediaPlayer::PlayingState:
            stopBtn->setEnabled(true);
            playBtn->setIcon(QIcon("://images/pause.png"));
            //toplabel->setText(tablewidget->item(playlist->currentIndex(),1)->text());
            resolveLrc(tablewidget->item(playlist->currentIndex(),1)->text());
            break;
        case QMediaPlayer::StoppedState:
            stopBtn->setEnabled(false);
            playBtn->setIcon(QIcon("://images/play.png"));
            //toplabel->setText(tr("<a href=\"http://www.cnblogs.com/tornadomeet/\">http://www.cnblogs.com/tornadomeet/</a>"));
            timelable->setText("00:00/00:00");
            lrc->stopLrcMask();
            lrc->setText(QString::fromLocal8Bit("简易音乐播放器"));
            //qDebug() << "111222";
            break;
        case QMediaPlayer::PausedState:
            stopBtn->setEnabled(true);
            playBtn->setIcon(QIcon("://images/play.png"));
            //toplabel->setText(tablewidget->item(playlist->currentIndex(),1)->text() + QString::fromLocal8Bit("已暂停"));
            //lrc->setText(tr("220"));
            if(lrcMap.isEmpty())
            {
                lrc->stopLrcMask();
                lrc->setText(toplabel->text());
            }
            break;
        case QMediaPlayer::BufferingMedia:
            break;
        default: ;
    }
}

void musicWidget::resolveLrc(const QString &sourceFileName)
{
    //lrc->setText(tr("123456"));
    lrcMap.clear();
    if(sourceFileName.isEmpty())
        return;
    QString fileName = sourceFileName;
    qDebug() << fileName;
   // lrc->setText(tr("550"));
    QString lrcFileName = fileName.remove(fileName.right(3));
    lrcFileName = fileName.remove(fileName.left(1));
    lrcFileName = "../../music/"+lrcFileName + "lrc";
    qDebug() << lrcFileName;
    QFile file(lrcFileName);
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        lrc->setText(tablewidget->item(playlist->currentIndex(),1)->text() + QString::fromLocal8Bit("----未找到歌词文件"));
        return;
    }
    QTextCodec::setCodecForLocale(QTextCodec::codecForLocale());
    QString allText = QString(file.readAll());
    file.close();
    QStringList lines = allText.split("\n");
    QRegExp rx("\\[\\d{2}\\:\\d{2}\\.\\d{2}\\]");("\n");
    foreach(QString oneLine,lines)
    {
        //QByteArray ba = oneLine.toLatin1();
        //const char* ss = ba.data();
        //qDebug() << QString::fromLocal8Bit(ss);
        QString temp = oneLine;
        temp.replace(rx,"");

        //qDebug() << temp;
        int pos = rx.indexIn(oneLine,0);

        while(pos != -1)
        {
            QString cap = rx.cap(0);
            QRegExp regexp;
            regexp.setPattern("\\d{2}(?=:)");
            regexp.indexIn(cap);
            int minute = regexp.cap(0).toInt();
            regexp.setPattern("\\d{2}(?=\\.)");
            regexp.indexIn(cap);
           // qDebug() << lrcFileName << pos << "111";
            int second = regexp.cap(0).toInt();
            regexp.setPattern("\\d{2}(?=\\])");
            regexp.indexIn(cap);
           // qDebug() << lrcFileName << pos << "222";
            int millisecond = regexp.cap(0).toInt();
            qint64 totalTime = minute * 60000 + second * 1000 + millisecond * 10;
            //qDebug() << minute << " " << second << " " << millisecond;
            lrcMap.insert(totalTime,temp);
            pos += rx.matchedLength();
            pos = rx.indexIn(oneLine,pos);
            //QByteArray ba = temp.toLatin1();
            //const char* str = ba.data();
            //qDebug() << QString::fromLocal8Bit(str);
        }
    }

    if(lrcMap.isEmpty())
    {
        lrc->setText(tablewidget->item(playlist->currentIndex(),1)->text() + QString::fromLocal8Bit("---歌词文件内容错误!"));
        return;
    }
}

void musicWidget::updatatime(qint64 position)
{
    qint64 time = position;
    //qDebug() << position;

    QTime time1(0,(time / 60000) % 60,(time / 1000) % 60);
    QTime time2(0,(player->duration() / 60000) % 60,(player->duration() / 1000) % 60);
    QString str = time1.toString("mm:ss") + "/" + time2.toString("mm:ss");
    timelable->setText(str);

    if(!lrcMap.isEmpty())
    {
        qint64 previous = 0;
        qint64 later = 0;
        //qDebug() << lrcMap.keys();
        foreach(qint64 value,lrcMap.keys())
        {
            if(position >= value)
            {
                previous = value;

            }
            else
            {
                later = value;
                break;
            }
            //qDebug() << value ;
        }

        if(later == 0)
            later = player->duration();
        //qDebug()<<previous << " " << later;
        QString currentLrc = lrcMap.value(previous);
        //QByteArray ba = currentLrc.toLatin1();
        //const char* str1 = ba.data();
        //qDebug() << QString::fromLocal8Bit(str1);
//        if(currentLrc.length() < 2)
//            currentLrc = QString::fromLocal8Bit("QT播放器--集月出品");
        if(currentLrc != lrc->text())
        {
            lrc->setText(currentLrc);
            //qDebug() << currentLrc;
            //lrc->setText("56789");
            toplabel->setText(currentLrc);
            qint64 intervalTime = later - previous;
            lrc->startLrcMask(intervalTime);
        }

    }
    else
        toplabel->setText(tablewidget->item(playlist->currentIndex(),1)->text());
        //toplabel->setText(tr("330"));
}

QString musicWidget::changfilename(QString filepath)
{
    QString tmp;
    tmp.clear();
       if(!filepath.isEmpty())
       {
           for(int i=0;i<filepath.count();i++)
           {
               if(filepath[i]=='/')
               {
                   for(int j=0;j<=i;j++)
                   {
                       filepath[j]=' ';
                   }
               }
               tmp=filepath;
           }

          return tmp;
       }
}


void musicWidget::mouseMoveEvent(QMouseEvent *event)
{
    this->move(event->globalPos() - this->dpos);
}


void musicWidget::mousePressEvent(QMouseEvent *event)
{
    this->windowPos= this->pos();            //获得当前部件位置
    this->mousePos = event->globalPos();     //获得鼠标位置
    this->dpos = mousePos - windowPos;       //移动后部件所在位置
}

//void musicWidget::changslider()
//{
//    int v=slider->value();
//    slider->setValue(++v);

//}


//void musicWidget::changplaystyle(int)
//{
//    int v=playstylecombox->currentIndex();
//    switch (v) {
//    case 0:
//        playlist->setPlaybackMode(QMediaPlaylist::Sequential);                      //设置顺序播放

//        break;
//    case 1:
//        playlist->setPlaybackMode(QMediaPlaylist::Loop);                            //设置列表循环
//    case 2:
//        playlist->setPlaybackMode(QMediaPlaylist::Random);                          //设置随机播放
//    case 3:
//        playlist->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop);               //设置单曲循环
//    default:
//        break;
//    }
//}


void musicWidget::playstate()
{
    if(num == 0)
    {
        QMessageBox::information(this,QString::fromLocal8Bit("警告"),QString::fromLocal8Bit("当前列表为空请添加歌曲"));
        return;
    }
    if(++i % 2 == 1)
    {
        playBtn->setIcon(QIcon("://images/pause.png"));
        //playBtn = new QPushButton(QIcon("://images/play.png"),tr(" "));
        player->play();
        timer->start();
    }
    else
    {
        playBtn->setIcon(QIcon("://images/play.png"));
        player->pause();
        timer->stop();
    }
}


void musicWidget::playstop()
{
    if(num == 0)
    {
        QMessageBox::information(this,QString::fromLocal8Bit("警告"),QString::fromLocal8Bit("当前列表为空请添加歌曲"));
        return;
    }
    player->stop();
    timer->stop();
    playBtn->setIcon(QIcon("://images/play.png"));
    slider->setValue(0);
    i = 0;
}


void musicWidget::nextplay()
{
    lrc->stopLrcMask();
    if(num == 0)
    {
        QMessageBox::information(this,QString::fromLocal8Bit("警告"),QString::fromLocal8Bit("当前列表为空请添加歌曲"));
        return;
    }
    int v=playlist->currentIndex();                                     //获取当前播放的下标
    //QString name=playlist->currentMedia();
    if(++v==playlist->mediaCount())                                     //判断当前是否为最后一首
    {
        v=0;
    }
    playlist->setCurrentIndex(v);                                   //将播放点设置到下一个位置
    slider->setValue(0);
    playstate();
    playstate();
    playBtn->setIcon(QIcon("://images/pause.png"));
    i = 1;
    player->play();

    timer->start();

}


void musicWidget::lastplay()
{
    lrc->stopLrcMask();
    if(num == 0)
    {
        QMessageBox::information(this,QString::fromLocal8Bit("警告"),QString::fromLocal8Bit("当前列表为空请添加歌曲"));
        return;
    }
    int v=playlist->currentIndex();
    if(--v<0)
        v=0;
    playlist->setCurrentIndex(v);
    slider->setValue(0);
    playstate();
    playstate();
    playBtn->setIcon(QIcon("://images/pause.png"));
    i = 1;
    player->play();
    timer->start();
}


QStringList musicWidget::readfile()
{
    QStringList musiclist=QFileDialog::getOpenFileNames(this,QString::fromLocal8Bit("选择文件"),tr("../../music"),tr("music(*.mp3)"));

    for(int i=0;i<musiclist.count();i++)
    {
       QString path = musiclist.at(i);

        if(!path.isEmpty())
        {
            playlist->addMedia(QUrl::fromLocalFile(path));                               //添加媒体文件
            QString filename = changfilename(path);
            int rownum=tablewidget->rowCount();

            QString str=filename.section("-",1,2);
            QString str1=str.split("[").front();
            tablewidget->insertRow(rownum);

            tablewidget->setItem(rownum,0,new QTableWidgetItem(filename.split("-").front()));
            tablewidget->setItem(rownum,1,new QTableWidgetItem(str1));
            tablewidget->setItem(rownum,2,new QTableWidgetItem(filename.split(".").last()));
            tablewidget->setItem(rownum,3,new QTableWidgetItem(path));

            tablewidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
//            for(int k = 0;k < num;k++)
//            {
//                if(musiclist[1] == tablewidget->item(k,1)->text())
//                {
//                    QMessageBox::information(this,QString::fromLocal8Bit("提示"),QString::fromLocal8Bit("歌曲已存在"));
//                    //return music;
//                }
//            }
        }
    }
    num = i+1;
    return musiclist;
}


void musicWidget::changplay(int index, int )
{
    playlist->setCurrentIndex(index);
    slider->setValue(0);
    playBtn->setIcon(QIcon("://images/pause.png"));
    ++i;
    player->play();
    timer->start();
}


void musicWidget::changimage()
{
    QString imagepath=QFileDialog::getOpenFileName(this,QString::fromLocal8Bit("选择图片"),tr("/"),tr("image file(*.png)"));
    QPixmap pix2(imagepath);
    pix2=pix2.scaled(this->width(),this->height());
    this->setAutoFillBackground(true);
    QPalette palette;
    palette.setBrush(QPalette::Background, QBrush(QPixmap(pix2)));
    this->setPalette(palette);

}


void musicWidget::updatenamelabel(int index)
{
    namelabel->setText(tablewidget->item(index,1)->text());

}


void musicWidget::updateslider()
{
    slider->setValue(0);
}


void musicWidget::positionChange(qint64 position)
{
    slider->setMaximum(player->duration() / 1000);
    slider->setValue(position / 1000);

//    moved = position;
//    QTime time(0,(moved / 60000) % 60,(moved / 1000) % 60);
//    timelable->setText(time.toString("mm:ss"));
    updatatime(position);
}


void musicWidget::seekchange(int position)
{
    player->setPosition(position * 1000);
//    moved = position;
//    QTime time(0,(moved / 60000) % 60,(moved / 1000) % 60);
//    timelable->setText(time.toString("mm:ss"));
    updatatime(position);
}

void musicWidget::volumchange(int vol)
{
    player->setVolume(vol);
}

void musicWidget::meteopen()
{
    //int lou = slider2->value();
    static bool flag = true;
    if(flag)
    {
//        loudle->setStyleSheet("QPushButton:!hover{border-image: url(://images/traysound2.png)}"
//                              "QPushButton:hover{border-image: url(://images/traysound2.png)}"
//                              "QPushButton:pressed{border-image: url(://images/traysound2.png)}"
//                              "QPushButton:focus{padding:-1;}");
        loudle->setIcon(QIcon("://images/traysound2.png"));
        slider2->setValue(0);
        //slider2->hide();
        loudle->setToolTip(QString::fromLocal8Bit("打开声音(n)"));
        player->setMuted(true);
    }
    else
    {
//        loudle->setStyleSheet("QPushButton:!hover{border-image: url(://images/traysound1.png)}"
//                              "QPushButton:hover{border-image: url(://images/traysound1.png)}"
//                              "QPushButton:pressed{border-image: url(://images/traysound1.png)}"
//                              "QPushButton:focus{padding:-1;}");
        loudle->setIcon(QIcon("://images/traysound1.png"));
        slider2->setValue(50);
        //slider2->show();
        loudle->setToolTip(QString::fromLocal8Bit("关闭声音(n)"));
        player->setMuted(false);
    }
    flag = !flag;
}

void musicWidget::changstyle()
{
    if(++j % 3 == 1)
    {
        stylechange->setIcon(QIcon("://images/shunxu.png"));
        stylechange->setToolTip(QString::fromLocal8Bit("循环播放(c)"));
        playlist->setPlaybackMode(QMediaPlaylist::Loop);
    }
    else if(j % 3 == 2)
    {
        stylechange->setIcon(QIcon("://images/suiji.png"));
        stylechange->setToolTip(QString::fromLocal8Bit("随机播放(c)"));
        playlist->setPlaybackMode(QMediaPlaylist::Random);
    }
    else
    {
        j = 0;
        stylechange->setIcon(QIcon("://images/danqu.png"));
        stylechange->setToolTip(QString::fromLocal8Bit("单曲循环(c)"));
        playlist->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop);
    }
}














 

 

 

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值