音乐播放器逻辑

  首先通过打开文件,获取文件夹下mp3文件的名字,将其存入QTableWidget控件下,通过双击QTableWidget空间中的内容,播放相应的mp3音乐文件,同时通过使用QMediaPlaylist来实现上一首,下一首的功能。

效果图

具体实现

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
class QMediaPlayer;
class QMediaPlaylist;class QLabel;namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = nullptr);void InitWidget();~Widget();private slots:void on_pushButton_clicked();void on_pushButton_5_clicked();void musicplayer(int,int);void on_pushButton_7_clicked();void on_pushButton_8_clicked();void on_pushButton_6_clicked(bool checked);void valueChanged(qint64 value);void setPositon(int);void updateDuration(qint64 duration);protected:private:void findFile(const QString&path,std::vector<QString>& fileNames);Ui::Widget *ui;QString path;QMediaPlayer *player;QMediaPlaylist *playlist;int num_music;int status = 1;qint64 position;
};#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include<QFileDialog>
#include<QDebug>
#include<QMediaPlayer>
#include<QTableWidgetItem>
#include<QMouseEvent>
#include<QMediaPlaylist>Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{player = new QMediaPlayer(this);playlist = new QMediaPlaylist;ui->setupUi(this);InitWidget();connect(ui->tableWidget,&QTableWidget::cellDoubleClicked,this,&Widget::musicplayer);connect(ui->horizontalSlider,&QSlider::sliderMoved,this,&Widget::setPositon);connect(player, &QMediaPlayer::durationChanged, this, &Widget::updateDuration);connect(player,&QMediaPlayer::positionChanged,this,&Widget::valueChanged);}void Widget::InitWidget()
{ui->label_2->hide();ui->label_3->hide();ui->tableWidget->hide();ui->pushButton_5->hide();ui->pushButton_6->hide();ui->pushButton_7->hide();ui->pushButton_8->hide();ui->horizontalSlider->hide();ui->label_4->hide();
}Widget::~Widget()
{delete ui;
}void Widget::on_pushButton_clicked()
{ui->label_2->show();ui->tableWidget->show();ui->pushButton_5->show();
}void Widget::on_pushButton_5_clicked()
{path = QFileDialog::getExistingDirectory(this,"请选择本地音乐文件夹");std::vector<QString> fileNames;findFile(path,fileNames);//设置行数,列数ui->tableWidget->setColumnCount(1);ui->tableWidget->setRowCount(fileNames.size());num_music = fileNames.size();for(int i=0;i<fileNames.size();i++){ui->tableWidget->setItem(i,0,new QTableWidgetItem(fileNames[i]));//设置cell不可编辑QTableWidgetItem* pItem = ui->tableWidget->item(i, 0);int editflag = Qt::ItemIsEditable;pItem->setFlags((Qt::ItemFlag)(~editflag & pItem->flags()));}
}static QString formatTime(qint64 timeMilliSeconds)
{qint64 seconds = timeMilliSeconds / 1000;const qint64 minutes = seconds / 60;seconds -= minutes * 60;return QStringLiteral("%1:%2").arg(minutes, 2, 10, QLatin1Char('0')).arg(seconds, 2, 10, QLatin1Char('0'));
}void Widget::musicplayer(int row, int column)
{QTableWidgetItem *item = new QTableWidgetItem;playlist->clear();player->pause();item = ui->tableWidget->item(row,0);
//        player->setMedia(QUrl::fromLocalFile(item->text()));for(int i=row;i<num_music;i++){item = ui->tableWidget->item(i,0);playlist->addMedia(QUrl::fromLocalFile(item->text()));}playlist->setCurrentIndex(0);playlist->setPlaybackMode(QMediaPlaylist::Loop);player->setPlaylist(playlist);player->play();ui->label_3->show();ui->pushButton_6->show();ui->pushButton_7->show();ui->pushButton_8->show();ui->horizontalSlider->show();ui->label_4->setText(formatTime(0));ui->label_4->show();
}void Widget::findFile(const QString &path, std::vector<QString> &fileNames)
{QDir dir(path);//获取path下所有文件夹和文件dir.setFilter(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot); //文件夹/文件/不包含./和..///排序文件夹优先dir.setSorting(QDir::DirsFirst);//获取文件夹下所有文件(文件夹+文件)QFileInfoList list = dir.entryInfoList();if(list.size()==0){return;}//遍历for(int i=0;i<list.size();i++){QFileInfo fileInfo = list.at(i);if(fileInfo.isDir()){findFile(fileInfo.filePath(),fileNames);}else {if(fileInfo.suffix()=="mp3"){fileNames.emplace_back(list.at(i).filePath());}}}
}void Widget::on_pushButton_7_clicked()
{playlist->next();
}void Widget::on_pushButton_8_clicked()
{playlist->previous();
}void Widget::on_pushButton_6_clicked(bool checked)
{int status1 = status%2;//qDebug()<<checked;if(status1==0){player->setPosition(position);player->play();ui->pushButton_6->setIcon(QPixmap("C:/Users/11830/Downloads/4.jpg"));}else {player->pause();position = player->position();ui->pushButton_6->setIcon(QPixmap("C:/Users/11830/Downloads/1.jpg"));}status+=1;
}void Widget::valueChanged(qint64 value)
{ui->horizontalSlider->setValue(value);ui->label_4->setText(formatTime(value));ui->label_3->setText(player->metaData("Title").toString());
}void Widget::setPositon(int value)
{if (qAbs(player->position() - value) > 99)player->setPosition(value);//qDebug()<<(value*player->duration()/100);
}void Widget::updateDuration(qint64 duration)
{ui->horizontalSlider->setRange(0, duration);ui->horizontalSlider->setEnabled(duration > 0);ui->horizontalSlider->setPageStep(duration / 10);
}

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓

Qt项目实战:MP3音乐播放器相关推荐

  1. Arduino触摸屏MP3音乐播放器和闹钟项目

    在这个项目中,我将向您展示如何制作Arduino触摸屏MP3音乐播放器和闹钟.您可以观看以下视频或阅读下面的书面教程. Arduino触摸屏MP3音乐播放器和闹钟项目 概述 主屏幕具有大时钟,日期和温 ...

  2. QT mp3音乐播放器实现框架,Qt鼠标事件,网络编程,QSqlite,Json解析,HTTP请求等

    QT mp3音乐播放器实现框架,Qt鼠标事件,网络编程,QSqlite,Json解析,HTTP请求等 框架搭建 UI设计 mp3.h mp3.cpp 隐藏窗口标题 最大化 最小化 关闭 框架搭建 .p ...

  3. QT纯代码打造音乐播放器

    QT纯代码打造音乐播放器 在.pro文件中添加 QT = prmultimedia 然后就是在.h文件中添加相关库函数 我添加的库函数 有些是不需要的,可以自定义删除修改 我是为方便以后扩展功能就留下 ...

  4. Android开发本地及网络Mp3音乐播放器(二十)歌曲下载完成后通知主界面更新本地音乐

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51448597 项目源码(打赏5积分请点这边):http://download.csdn ...

  5. 毕业设计 单片机MP3音乐播放器 - 物联网 嵌入式

    文章目录 1 简介 2 绪论 2.1 课题背景与目的 3 系统设计 3.1 系统架构 3.2 软件部分设计 3.3 实现效果 3.4 部分相关代码 4 最后 1 简介 Hi,大家好,学长今天向大家介绍 ...

  6. 毕业设计 嵌入式 MP3音乐播放器设计与实现

    文章目录 1 简介 2 绪论 2.1 课题背景与目的 3 系统设计 3.1 系统架构 3.2 软件部分设计 3.3 实现效果 3.4 部分相关代码 4 最后 1 简介 Hi,大家好,学长今天向大家介绍 ...

  7. stm32毕业设计 单片机MP3音乐播放器

    文章目录 1 简介 2 绪论 2.1 课题背景与目的 3 系统设计 3.1 系统架构 3.2 软件部分设计 3.3 实现效果 3.4 部分相关代码 1 简介 Hi,大家好,这里是学长今天向大家介绍一个 ...

  8. Android开发本地及网络Mp3音乐播放器(十二)创建NetMusicListAdapter、SearchResult显示网络音乐列表

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51290181 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 实现功能: 实现NetM ...

  9. Android开发本地及网络Mp3音乐播放器(十三)网络音乐搜索功能实现,歌名歌手专辑名搜索

    转载请注明出处:http://blog.csdn.net/iwanghang/article/details/51298411 觉得博文有用,请点赞,请留言,请关注,谢谢!~ 实现功能: 实现网络音乐 ...

  10. YOLOv5 Qt 手势车载中控音乐播放器

    资源: 配置工程:Python&Qt--yolov5手势识别隔空操纵车载音乐播放器(点击查看) 工程资源:YOLOv5 & Qt 手势车载中控音乐播放器v2(点此下载) 老工程资源:Y ...

最新文章

  1. js 数据类型和转化
  2. docker-compose 安装mysql
  3. 天呐!java生成DAT文件并写入数据
  4. 解析Objective-C中多态、动态类型和动态绑定
  5. mysql insert replace_mysql 操作总结 INSERT和REPLACE
  6. 【模板/经典题型】并查集维护生成树
  7. 轮盘赌算法的java实现算例
  8. Dajngo之ajax(get和post)请求(亲测)
  9. openstack---keystone
  10. 智能视频抠图_抠图扣视频,AI人工智能还能这样玩!
  11. FTP、TFTP 实现 NAT ALG 访问
  12. AlphaPose环境配置与测试
  13. 想进大公司先测你EQ
  14. Java实现哈希加密(HmacSHA1、HmacMD5、HmacSHA256、HmacSHA512)
  15. Python的自省函数
  16. 每日C语言代码(The third day)——斐波那契(兔子数列)
  17. Uber入驻四川乐山峨眉地区
  18. 为什么不能直接通过IP访问网站
  19. 类HD630的集显玩CS:GO之类的FPS游戏
  20. “素质教育”与“动力汽车”——徐小平

热门文章

  1. 【Linux应用】QEMU使用简介
  2. 淘宝主图视频1:1正方形竖屏视频讲解
  3. 数据流图(DFD)的概念
  4. 图文并茂—FDM、OFDM的区别及优缺点、调制解调过程
  5. 关于LIS(普通方式及二分查找方式)
  6. ssh 安全防护备忘录
  7. 开源的HTML5前端框架Amaze UI发布,推进mobile first前端Web方案
  8. CVE-2020-9496:Apache Ofbiz 反序列化漏洞分析
  9. docker数据迁移
  10. Qt优秀开源项目之一:流媒体直播系统Open Broadcaster Software