QT音频播放器

发布于:2022-11-03 ⋅ 阅读:(464) ⋅ 点赞:(0)

最近学的QT,如果程序中有不规范的地方请多多包涵

项目功能:播放歌曲 ,播放视频,上一曲,下一曲,双击歌曲直接播放,循环播放,单曲循环,随机播放,音量调节,添加本地歌曲,把视频或音乐拖到窗口直接播放,拖动进度条,删除歌曲。

本程序支持的歌曲或视频类型:list << "*.mp3" << "*.wav" << "*.wma" << "*.flac" << "*.wmv" << "*.mp4" << "*.mov" << "*.avi" (如果需要播放其他类型的,需要添加对应类型后缀)

部分类型是播放不了的,需要安装解码器,下面是其他两位博主的方法

参考链接:https://blog.csdn.net/mmmmmmyy/article/details/81877233?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163972446016780271540688%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163972446016780271540688&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-81877233.pc_search_mgc_flag&utm_term=DirectShowPlayerService%3A%3AdoRender%3A+Unresolved+error+code+80040266&spm=1018.2226.3001.4187https://blog.csdn.net/mmmmmmyy/article/details/81877233?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163972446016780271540688%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163972446016780271540688&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-81877233.pc_search_mgc_flag&utm_term=DirectShowPlayerService%3A%3AdoRender%3A+Unresolved+error+code+80040266&spm=1018.2226.3001.4187参考链接:https://blog.csdn.net/qq_41071706/article/details/89855986?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163972446016780271540688%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163972446016780271540688&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-89855986.pc_search_mgc_flag&utm_term=DirectShowPlayerService%3A%3AdoRender%3A+Unresolved+error+code+80040266&spm=1018.2226.3001.4187https://blog.csdn.net/qq_41071706/article/details/89855986?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163972446016780271540688%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=163972446016780271540688&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-89855986.pc_search_mgc_flag&utm_term=DirectShowPlayerService%3A%3AdoRender%3A+Unresolved+error+code+80040266&spm=1018.2226.3001.4187

播放歌曲界面

播放视频界面(双击播放界面可以窗口最大化)

程序部分:

构造函数和文件获取部分

AudioPlay::AudioPlay(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::AudioPlay)
{
    ui->setupUi(this);

    player      = new QMediaPlayer;
    playerList  = new QMediaPlaylist;
    videoPlayWidget = new videowidget;
    // 在当前路径创建一个文件(文件名PlayList.ini)把读到的歌曲输出到里面,方便下一次播放
    configIniWrite = new QSettings("PlayList.ini", QSettings::IniFormat);

    playerIndex = 0;
    playerPrevious = 0;
    playerMode = 0;

    player->setVolume(50);             // 设置初始音量
    ui->Slider_Volume->setValue(50);
    ui->label_Volume->setText("50%");
    playerList->setPlaybackMode(QMediaPlaylist::Loop);                       // 循环播放模式


    // 允许文件拖拽到窗口部分
    this->setAcceptDrops(true);
    mLocation = this->geometry();
    mIsMax = false;
    mDrag = false;
    //


    // 手动添加窗口顶部处理部分
    this->installEventFilter(this); // 事件过滤器就是接收所有被发送到这个对象的事件的对象

    ui->pushButton_WindowMin->setIcon(QIcon(":/image/jianhao.png"));
    ui->pushButton_WindowMin->setIconSize(QSize(16,16));

    ui->pushButton_WindowMax->setIcon(QIcon(":/image/fangkuang.png"));
    ui->pushButton_WindowMin->setIconSize(QSize(16,16));

    ui->pushButton_WindowExit->setIcon(QIcon(":/image/guanbi.png"));
    ui->pushButton_WindowMin->setIconSize(QSize(16,16));



    ui->pushButton_WindowMin->setFlat(true);
    ui->pushButton_WindowMin->setStyleSheet("QPushButton{border:none;background:transparent;}");

    ui->pushButton_WindowMax->setFlat(true);
    ui->pushButton_WindowMax->setStyleSheet("QPushButton{border:none;background:transparent;}");

    ui->pushButton_WindowExit->setFlat(true);
    ui->pushButton_WindowExit->setStyleSheet("QPushButton{border:none;background:transparent;}");

    ui->tableWidget->setShowGrid(false);//隐藏表格线
       setStyleSheet("QMainWindow{color:#E8E8E8;background:#43CD80;}");
//       //另外在设计器内查看widgetTitle样式,内有标题栏各个子控件的样式设置



//    // 设置窗口名称,图标
    this->setWindowTitle(QTextCodec::codecForName("GBK")->toUnicode("音频播放器"));
    this->setWindowIcon(QIcon(":/image/icon.png"));

       QPixmap *pixmap = new QPixmap(":/image/icon.png");
       pixmap->scaled(ui->logo->size(), Qt::KeepAspectRatio, Qt::SmoothTransformation);
       ui->logo->setScaledContents(true);
       ui->logo->setPixmap(*pixmap);
       ui->label_Title->setText(QTextCodec::codecForName("GBK")->toUnicode("音频播放器"));


    // 设置背景图片为bj.jpg
    this->setObjectName("mainWindow");
    this->setStyleSheet("#mainWindow{border-image:url(:/image/bj.png);}");

    this->setWindowFlags(Qt::FramelessWindowHint);//无边框
//    this->setAttribute(Qt::WA_TranslucentBackground);//背景透明

//    this->setWindowFlags(Qt::X11BypassWindowManagerHint | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);

    // 设置按键图标
    ui->PushButton_PlayStop->setIcon(QIcon(":/image/bofang.png"));
    ui->PushButton_PlayStop->setIconSize(QSize(48,48));

    ui->PushButton_PlayMode->setIcon(QIcon(":/image/yinlebofangye-xunhuanbofang.png"));
    ui->PushButton_PlayMode->setIconSize(QSize(48,48));

    ui->PushButton_Previous->setIcon(QIcon(":/image/shangyishou.png"));
    ui->PushButton_Previous->setIconSize(QSize(48,48));

    ui->PushButton_Next->setIcon(QIcon(":/image/xiayishou.png"));
    ui->PushButton_Next->setIconSize(QSize(48,48));

    ui->PushButton_OpenFile->setIcon(QIcon(":/image/tianjiagequ.png"));
    ui->PushButton_OpenFile->setIconSize(QSize(48,48));

    ui->PushButton_DeleteMusic->setIcon(QIcon(":/image/shanchu.png"));
    ui->PushButton_DeleteMusic->setIconSize(QSize(48,48));


    QPixmap *pixmap1 = new QPixmap(":/image/jurassic.png");
    pixmap->scaled(QSize(16,16), Qt::KeepAspectRatio, Qt::SmoothTransformation);
    ui->label_Volume_2->setScaledContents(true);
    ui->label_Volume_2->setPixmap(*pixmap1);

    // 设置图标为透明

    ui->PushButton_PlayStop->setFlat(true);
    ui->PushButton_PlayStop->setStyleSheet("QPushButton{border:none;background:transparent;}");

    ui->PushButton_PlayMode->setFlat(true);
    ui->PushButton_PlayMode->setStyleSheet("QPushButton{border:none;background:transparent;}");

    ui->PushButton_Previous->setFlat(true);
    ui->PushButton_Previous->setStyleSheet("QPushButton{border:none;background:transparent;}");

    ui->PushButton_Next->setFlat(true);
    ui->PushButton_Next->setStyleSheet("QPushButton{border:none;background:transparent;}");

    ui->PushButton_OpenFile->setFlat(true);
    ui->PushButton_OpenFile->setStyleSheet("QPushButton{border:none;background:transparent;}");

    ui->PushButton_DeleteMusic->setFlat(true);
    ui->PushButton_DeleteMusic->setStyleSheet("QPushButton{border:none;background:transparent;}");

    ui->label_Volume->setStyleSheet("QLabel{border:none;background:transparent;}");

    ui->label_MusicTime->setStyleSheet("QLabel{border:none;background:transparent;}");

    ui->label_PlayTime->setStyleSheet("QLabel{border:none;background:transparent;}");

    ui->Slider_Volume->setStyleSheet("QSlider{border:none;background:transparent;}");

    ui->Slider_ProgressBar->setStyleSheet("QSlider{border:none;background:transparent;}");

    ui->label_Volume_2->setStyleSheet("QLabel{border:none;background:transparent;}");

    ui->tableWidget->verticalHeader()->setHidden(true);
    ui->tableWidget->setStyleSheet("QTableView::item:selected{color:black;background:black;}");
    ui->tableWidget->setStyleSheet("QTableWidget{border:none;background:transparent;}");


     //设置歌曲列表控件的透明度
 //     ui->label_Volume->setStyleSheet(QString("color:rgba(255,255,255,255);background-color:rgba(10,10,10,150)"));
       //设置歌词列表控件的透明度
 //     ui->tableWidget->setStyleSheet(QString("color:rgba(255,255,255,255);background-color:rgba(10,10,10,200)"));


//    setWindowFlags(Qt::FramelessWindowHint);  // 无边框


//    播放测试
//    player->setMedia(QUrl::fromLocalFile("C:\\Users\\71780\\Desktop\\MUSIC\\刘德华 - 暗里着迷.wav"));
//    player->setPlaylist();
//    player->setVolume(50);
//    player->play();

//     searchMusic("C:\\Users\\71780\\Desktop\\MUSIC");

    // 读取配置文件的内容:歌曲名 把前一次写入的歌曲读出来
    configIniRead = new QSettings("PlayList.ini", QSettings::IniFormat);
    for(int i=0; ; ++i) //  将所有的播放列表显示在列表控件中
    {
        if(configIniRead->value("/song/"+QString::number(i),100).toInt()!=100)
        {
            QString path = configIniRead->value("/song/"+QString::number(i)).toString();


            playerList->addMedia(QUrl::fromLocalFile(path));

            QFileInfo fileInfo;
            fileInfo = QFileInfo(path);
            QString fileName = fileInfo.completeBaseName(); //  文件名不带后缀
            QString fileSuffix = fileInfo.suffix(); //  文件后缀

            int rownum=ui->tableWidget->rowCount();
            ui->tableWidget->insertRow(rownum);
            ui->tableWidget->setItem(rownum, 0, new QTableWidgetItem(fileName + "." + fileSuffix));
        }
        else
        {
            break;
        }
    }
    player->setPlaylist(playerList); // 把播放列表添加到播放器
    playerList->setCurrentIndex(0);
}

AudioPlay::~AudioPlay()
{
    delete ui;
}


void AudioPlay::searchMusic(QString dirPath)
{
    QList<QString>  findedFilePath;
    QStringList list;

    bool status = false;

//    playerList->clear();     //清除播放列表
    list << "*.mp3" << "*.wav" << "*.wma" << "*.flac" << "*.wmv" << "*.mp4" << "*.mov" << "*.avi" ;
    findFormat(dirPath, list, findedFilePath);

    foreach(QString music, findedFilePath)
    {
        QFileInfo fileInfo;
        fileInfo = QFileInfo(music);   
        QString fileName = fileInfo.completeBaseName();  // 文件名不带后缀
        QString fileSuffix = fileInfo.suffix();  // 文件后缀

        qDebug() << fileInfo;

        if(playerList->mediaCount() > 0)
        {
            for (int i = 0;i < playerList->mediaCount() ; i++)
            {
                QString songName = ui->tableWidget->item(i,0)->text();         //  取出字符串
                if(songName == fileName + "." + fileSuffix)              // 判断是否是重复添加歌曲
                {
                    status = true;
                    break;
                }
            }

        }

        if(status == false)
        {
            playerList->addMedia(QUrl(music));       // 把扫描得到的歌曲添加到播放列表上。带路径的

            int rownum = ui->tableWidget->rowCount();
            ui->tableWidget->insertRow(rownum);
            ui->tableWidget->setItem(rownum, 0, new QTableWidgetItem(fileName + "." + fileSuffix));
            configIniWrite->setValue("/song/"+QString::number(rownum), music); // 保存歌曲列表
        }
       status = false;


    }
    player->setPlaylist(playerList); // 把播放列表添加到播放器
}

// 打开文件
void AudioPlay::on_PushButton_OpenFile_clicked()
{
    QString dir = QFileDialog::getExistingDirectory(this, tr("Open Directory"),
                                                     "./",
                                                     QFileDialog::ShowDirsOnly
                                                     | QFileDialog::DontResolveSymlinks);
    searchMusic(dir);
}

void AudioPlay::findFormat(QString &path, QStringList format, QList<QString>& receiveFilePath)
{

    // 判断路径是否存在
    QDir dir(path);
    if(!dir.exists())   return;


    // 定义迭代器并设置过滤器
    QDirIterator dirIterator(path, format, QDir::Files | QDir::NoSymLinks,QDirIterator::Subdirectories);
    while(dirIterator.hasNext())
    {
        dirIterator.next();
        receiveFilePath.append(dirIterator.fileInfo().absoluteFilePath());
    }
}

基本的按键槽函数


// 播放音乐
void AudioPlay::playMusic(int index)
{

    if(playerList->mediaCount() == 0)
    {
        QMessageBox QmgBox;
        QMessageBox::warning(this,QTextCodec::codecForName("GBK")->toUnicode("错误"),QTextCodec::codecForName("GBK")->toUnicode("播放列表为空,请先添加音频"));
        return;
    }
    videoPlayWidget->close();

    if(index < 0)
    {
       index =  playerList->mediaCount() - 1; //  计算播放列表文件数
    }

    if(index > playerList->mediaCount() - 1)
    {
       index =  0;
    }

    connect(player,SIGNAL(durationChanged(qint64)),this,SLOT(do_getduration_slots(qint64)));      // 获取歌曲时间总长,信号与槽
    connect(player,SIGNAL(positionChanged(qint64)),this,SLOT(do_updatePosition_slots(qint64)));   // 获取当前播放进度,信号与槽

    ui->PushButton_PlayStop->setIcon(QIcon(":/image/zanting-xian.png"));
    ui->PushButton_PlayStop->setIconSize(QSize(48,48));


    if(playerPrevious != index) // 判断是否是上一首歌曲
    {
        playerList->setCurrentIndex(index);
    }
    else   // 继续播放上一首歌曲
    {
        do_getduration_slots(0);
    }

    // 判断是否是视频 //"*.mp4" << "*.mov" << "*.avi
    if(ui->tableWidget->item(index,0)->text().right(3) == "wmv" ||
       ui->tableWidget->item(index,0)->text().right(3) == "mp4" ||
       ui->tableWidget->item(index,0)->text().right(3) == "mov" ||
       ui->tableWidget->item(index,0)->text().right(3) == "avi"    )
    {
        ui->horizontalLayout_4->addWidget(videoPlayWidget);
        player->setVideoOutput(videoPlayWidget);
        videoPlayWidget->show();
        player->play();
    }

    player->play();
}

播放处理函数 


// 播放和停止槽函数
void AudioPlay::on_PushButton_PlayStop_clicked()
{

    if(player->state() == QMediaPlayer::PlayingState) // 判断当前播放状态
    {
        player->pause();
        ui->PushButton_PlayStop->setIcon(QIcon(":/image/bofang.png"));
        ui->PushButton_PlayStop->setIconSize(QSize(48,48));
    }
    else
    {
        playMusic(playerList->currentIndex());
    }
}

// 上一曲
void AudioPlay::on_PushButton_Previous_clicked()
{
    playerIndex = playerList->currentIndex() - 1;
    playMusic(playerIndex);
}

// 下一曲
void AudioPlay::on_PushButton_Next_clicked()
{
    playerIndex = playerList->currentIndex() + 1;
    playMusic(playerIndex);
}

// 设置音量
void AudioPlay::on_Slider_Volume_valueChanged(int value)
{
    player->setVolume(value);
    ui->label_Volume->setText(QString::number(value)+"%");
}

进度条和歌曲(视频)时间显示部分 


// 获取歌曲时长,歌曲改变时才会执行这个槽函数
void AudioPlay::do_getduration_slots(qint64 playtime)
{
    qDebug() << __FUNCTION__;

    playtime = player->duration();  // 获取时间
    GetTime(playtime);

    ui->Slider_ProgressBar->setRange(0,playtime); // 根据播放时长来设置滑块的范围
    ui->Slider_ProgressBar->setEnabled(playtime > 0);
    ui->Slider_ProgressBar->setPageStep(playtime / 10); // 以及每一步的步数

    // 前一首设置为黑色
    QTableWidgetItem *FileName1 = new QTableWidgetItem(ui->tableWidget->item(playerPrevious,0)->text());
    FileName1->setTextColor(QColor(Qt::black));
    ui->tableWidget->setItem(playerPrevious,0,FileName1);

    // 当前设置为蓝绿色
    QTableWidgetItem *FileName = new QTableWidgetItem(ui->tableWidget->item(playerList->currentIndex(),0)->text());
    FileName->setTextColor(QColor(Qt::cyan));
    ui->tableWidget->setItem(playerList->currentIndex(),0,FileName);

    playerPrevious = playerList->currentIndex();
}

// 计算时间
void AudioPlay::GetTime(qint64 playtime)
{
    int h,m,s;
    playtime /= 1000;  //获得的时间是以毫秒为单位的
    h = playtime/3600;
    m = (playtime-h*3600)/60;
    s = playtime-h*3600-m*60;

    ui->label_MusicTime->setText(QString("%1:%2:%3").arg(h,2,10,QLatin1Char('0')).arg(m,2,10,QLatin1Char('0')).arg(s,2,10,QLatin1Char('0')));  // 把int型转化为string类型后再设置为label的text
/*    ui->label_MusicTime->setStyleSheet("color:white");    */               // 设置字体颜色为白色

    }


// 接收歌曲位置改变,改变进度条
void AudioPlay::do_updatePosition_slots(qint64 position)
{
    int h,m,s;

    ui->Slider_ProgressBar->setValue(position);//设置滑块位置

    position /= 1000;  //获得的时间是以毫秒为单位的
    h = position/3600;
    m = (position-h*3600)/60;
    s = position-h*3600-m*60;
    //     arg(整数类型,补位数,进制,补位字符);
    ui->label_PlayTime->setText(QString("%1:%2:%3").arg(h,2,10,QLatin1Char('0')).arg(m,2,10,QLatin1Char('0')).arg(s,2,10,QLatin1Char('0')));  // 把int型转化为string类型后再设置为label的text
}

删除和拖拽部分 

// 拖动进度松手槽函数
void AudioPlay::on_Slider_ProgressBar_sliderReleased()
{
//    qDebug() << __FUNCTION__;
    player->setPosition(ui->Slider_ProgressBar->value());
}

// 设置播放模式槽函数
void AudioPlay::on_PushButton_PlayMode_clicked()
{
//   qDebug() << __FUNCTION__;

   switch(playerMode++)
   {
        case 0:     ui->PushButton_PlayMode->setIcon(QIcon(":/image/danquxunhuan.png"));
                    ui->PushButton_PlayMode->setIconSize(QSize(48,48));
                    playerList->setPlaybackMode(QMediaPlaylist::CurrentItemInLoop);          // 单曲循环
        break;

        case 1:     ui->PushButton_PlayMode->setIcon(QIcon(":/image/suijibofang.png"));
                    ui->PushButton_PlayMode->setIconSize(QSize(48,48));
                    playerList->setPlaybackMode(QMediaPlaylist::Random);                     // 随机播放
        break;

        case 2:     ui->PushButton_PlayMode->setIcon(QIcon(":/image/yinlebofangye-xunhuanbofang.png"));
                    ui->PushButton_PlayMode->setIconSize(QSize(48,48));
                    playerList->setPlaybackMode(QMediaPlaylist::Loop);                       // 循环播放
        break;

   }

   if(playerMode == 3)  playerMode = 0;
}

// 删除歌曲
void AudioPlay::on_PushButton_DeleteMusic_clicked()
{
//    qDebug() << __FUNCTION__;
    if(playerList->mediaCount() == 0) return;

    configIniDelete = new QSettings("PlayList.ini",QSettings::IniFormat);
    int curPlayIndex = ui->tableWidget->currentRow();
    if( curPlayIndex >= 0)
    {
        for (int i = curPlayIndex; ; i++)
        {
            if(configIniDelete->value("/song/"+QString::number(i+1),100).toInt() != 100) //
            {
                configIniDelete->setValue("/song/"+QString::number(i),configIniDelete->value("/song/"+QString::number(i+1)).toString());
            }
            else
            {
                configIniDelete->remove("/song/"+QString::number(i));
                break;
            }
        }
       playerList->removeMedia(curPlayIndex);
       ui->tableWidget->removeRow(curPlayIndex);
    }
}




bool AudioPlay::eventFilter(QObject *obj, QEvent *e)
{
//    qDebug() << __FUNCTION__;
    if (obj == ui->centralWidget)
    {
        if(e->type() == QEvent::MouseButtonDblClick)
        {
            on_pushButton_WindowMax_clicked();
            return true;
        }
    }
    return QObject::eventFilter(obj, e);
}

void AudioPlay::mousePressEvent(QMouseEvent *e)//鼠标按下事件
{
    qDebug() << __FUNCTION__;
    if (e->button() == Qt::LeftButton)
    {
        mDrag = true;
        mDragPos = e->globalPos() - pos();
        e->accept();
    }
}

void AudioPlay::mouseMoveEvent(QMouseEvent *e)//鼠标移动事件
{
    qDebug() << __FUNCTION__;
    if (mDrag && (e->buttons() && Qt::LeftButton))
    {
        move(e->globalPos() - mDragPos);
        e->accept();
    }
}

void AudioPlay::mouseReleaseEvent(QMouseEvent *e)//鼠标释放事件
{
    qDebug() << __FUNCTION__;
    mDrag = false;
}


void AudioPlay::on_pushButton_WindowMin_clicked()
{
    showMinimized();
}

void AudioPlay::on_pushButton_WindowMax_clicked()
{
    if (mIsMax)
       {
           setGeometry(mLocation);
//           ui->pushButton_WindowMax->setIcon(QIcon(":/image/max1.png"));
//           ui->pushButton_WindowMax->setToolTip(QStringLiteral("最大化"));
       }
       else
       {
           mLocation = geometry();
           setGeometry(qApp->desktop()->availableGeometry());
//           ui->pushButton_WindowMax->setIcon(QIcon(":/image/max2.png"));
//           ui->pushButton_WindowMax->setToolTip(QStringLiteral("还原"));
       }
       mIsMax = !mIsMax;

}

void AudioPlay::on_pushButton_WindowExit_clicked()
{
    qApp->exit();
}


//接受拖拽的文件
void AudioPlay::dragEnterEvent(QDragEnterEvent * event)
{
    qDebug()<<__FUNCTION__;
    event->acceptProposedAction();    //接受拖拽的文件
}

// 获取拖拽的文件名
void AudioPlay::dropEvent(QDropEvent * event)
{
    qDebug()<<__FUNCTION__;

    QString fileInfo;
    QFileInfo  Info;
    bool status = false;

    auto urls = event->mimeData()->urls();
    for(auto it = urls.begin();it != urls.end();++it)    //获取拖拽的文件名
    {
        fileInfo = it->toLocalFile();
        Info = QFileInfo(it->toLocalFile());

        qDebug()<<it->toLocalFile();
    }

    QString fileName = Info.completeBaseName(); //  文件名不带后缀
    QString fileSuffix = Info.suffix(); //  文件后缀

    // list << "*.mp3" << "*.wav" << "*.wma" << "*.flac" << "*.wmv" << "*.mp4" << "*.mov" << "*.avi" ;
    if(fileSuffix != "mp3" &&
       fileSuffix != "wav"  &&
       fileSuffix != "wma"  &&
       fileSuffix != "flac" &&
       fileSuffix != "wmv"  &&
       fileSuffix != "mp4"  &&
       fileSuffix != "mov"  &&
       fileSuffix != "avi"
       ) return;

    if(playerList->mediaCount() > 0)
    {
        for (int i = 0;i < playerList->mediaCount() ; i++)
        {
            QString songName = ui->tableWidget->item(i,0)->text();         //  取出字符串
            if(songName == fileName + "." + fileSuffix)              // 判断是否是重复添加歌曲
            {
                status = true;
                break;
            }
        }

    }

    if(status == false)
    {

        playerList->addMedia(QUrl(fileInfo));       // 把扫描得到的歌曲添加到播放列表上。带路径的

        int rownum = ui->tableWidget->rowCount();
        ui->tableWidget->insertRow(rownum);
        ui->tableWidget->setItem(rownum, 0, new QTableWidgetItem(fileName + "." + fileSuffix));

        configIniWrite->setValue("/song/"+QString::number(rownum), fileInfo); // 保存歌曲列表
        player->setPlaylist(playerList); // 把播放列表添加到播放器
        playMusic(rownum);
    }

}

播放器已经打包好,直接双击就可以运行(这里就不介绍QT打包项目过程)

刚运行是没有歌曲和视频的,需要手动添加(点击帮助会跳到本人博客界面)

也可以用鼠标把歌曲或视频拖到窗口

程序源码:https://github.com/Lifashi/QT-AudioPlayhttps://github.com/Lifashi/QT-AudioPlay有不懂的地方可以私聊

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到