广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Qt项目实战之实现MP3音乐播放器
  • 722
分享到

Qt项目实战之实现MP3音乐播放器

Qt实现MP3音乐播放器QtMP3音乐播放器Qt音乐播放器 2023-03-19 17:03:18 722人浏览 八月长安
摘要

目录音乐播放器逻辑效果图具体实现音乐播放器逻辑 首先通过打开文件,获取文件夹下mp3文件的名字,将其存入QtableWidget控件下,通过双击QTableWidget空间中的内容,

音乐播放器逻辑

首先通过打开文件,获取文件夹下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_OBJECT
 
public:
    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项目实战之实现MP3音乐播放器的文章就介绍到这了,更多相关Qt MP3音乐播放器内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Qt项目实战之实现MP3音乐播放器

本文链接: https://www.lsjlt.com/news/200292.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Qt项目实战之实现MP3音乐播放器
    目录音乐播放器逻辑效果图具体实现音乐播放器逻辑 首先通过打开文件,获取文件夹下mp3文件的名字,将其存入QTableWidget控件下,通过双击QTableWidget空间中的内容,...
    99+
    2023-03-19
    Qt实现MP3音乐播放器 Qt MP3音乐播放器 Qt音乐播放器
  • Qt如何实现MP3音乐播放器
    这篇文章主要介绍“Qt如何实现MP3音乐播放器”,在日常操作中,相信很多人在Qt如何实现MP3音乐播放器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Qt如何实现MP3音乐播放器”的疑惑有所帮助!接下来,请跟...
    99+
    2023-07-05
  • Android音乐播放器开发实战
    本文介绍音乐播放器的音乐播放功能实现。 音乐播放功能最初的形态是根据B站大佬的视频学着做的,现在应该还能搜索到他的视频。当然他只做了一个雏形,印...
    99+
    2022-06-06
    实战 Android
  • Python趣味挑战之实现简易版音乐播放器
    目录一、前言二、实现过程三、完整代码四、最终的音乐播放器APP如下一、前言 今天我们将用Python来创建一个属于自己的音乐播放器。为此,我们将使用三个软件包: Tkint...
    99+
    2022-11-12
  • Vue.js实现音乐播放器
    本文实例为大家分享了Vue.js实现音乐播放器的具体代码,供大家参考,具体内容如下 目录如下: 运行效果如图所示: 代码如下: <!DOCTYPE html> &...
    99+
    2022-11-12
  • js实现音乐播放器
    本文实例为大家分享了js实现音乐播放器的具体代码,供大家参考,具体内容如下 音乐播放的主要js代码 音乐数据的数组对象 想向前端网页提供数据,并且为后面的js代码提供了音乐路径  {...
    99+
    2022-11-13
  • python实现音乐播放器
    python实现音乐播放器 模块:pygame 模块:time Python 布尔循环实例: import timeimport pygamemuxi_k = """_________________|Pyhon音乐播放器|͞͞͞͞ ...
    99+
    2023-01-30
    播放器 音乐 python
  • Qt+Quick如何实现播放音乐和视频
    这篇文章主要介绍了Qt+Quick如何实现播放音乐和视频的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Qt+Quick如何实现播放音乐和视频文章都会有所收获,下面我们一起来看看吧。MediaPlayer 是 Q...
    99+
    2023-07-05
  • Android实现多媒体之播放音乐
    闲来无聊,最近了解了一下多媒体的一些初步知识。 音频播放主要设计到MediaPlayer这个类,播放音频的路径可以来源于三个地方。 1.应用内的音频 public cl...
    99+
    2022-06-06
    音乐 多媒体 Android
  • Android Studio 实现音乐播放器
    目录 一、引言 视频效果展示: 图片效果展示: .启动页效果 2.登录页效果 3.注册页效果 4.歌曲列表页效果 5.播放页效果  二、详细设计 1.登陆注册功能 2.音乐列表页面 2.音乐播放功能 一、引言         Andr...
    99+
    2023-09-29
    android studio android ide
  • Qt+Quick实现播放音乐和视频的开发
    目录1、播放音乐2、播放视频3、多媒体元信息MediaPlayer 是 QML 提供的核心多媒体类,可以播放音频、视频。要使用 MediaPlayer,需要引入 QtMultimed...
    99+
    2023-03-08
    Qt Quick实现播放音乐 Qt Quick播放视频 Qt Quick
  • Python项目实战:爬去所有相关的音乐文件播放链接
    前言现在大多数音乐网站是禁止下载音乐的,你只能按它的要求是去下载客户端,下载客户端之后,有时候你又会发现需要VIP或者是要钱,.....今天为大家介绍一个用Python爬取所有相关音乐的彼方链接.简单说一下原理,因为你在网站上播放的时候,肯...
    99+
    2023-06-02
  • 简单实现java音乐播放器
    学习过java语言的你,或多或少,在某天突发奇想,想着用swing做一个音乐播放器。但是,发现很难找到,相关的java代码,或者你下载的代码有问题,或者你代码里面引入的类包找不到。为了解决自如此类的问题。在这儿,有如下的代码可以供大家参考。...
    99+
    2023-05-31
    java 播放器 ava
  • java音乐播放器实现代码
    本文实例为大家分享了java音乐播放器的具体代码,供大家参考,具体内容如下这个是源码结构介绍这个是界面,有点简陋,见笑了,但是基本上的东西都有了,没办法,没有美工的程序写的界面直接上源代码Player.javapackage com.ser...
    99+
    2023-05-31
    java 播放器 ava
  • Android音乐播放器如何实现
    这篇“Android音乐播放器如何实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Android音乐播放器如何实现”文章吧...
    99+
    2023-07-04
  • Qt5如何实现音乐播放器
    要实现音乐播放器,你可以使用Qt5提供的多媒体框架来实现。以下是一个简单的示例:1. 首先,你需要在Qt项目中包含多媒体模块。在项目...
    99+
    2023-08-11
    Qt5
  • android实现简单音乐播放器
    本文实例为大家分享了android音乐播放器的具体代码,供大家参考,具体内容如下 话不多说先上效果 前言 写这个音乐播放器实在是迫不得已。因为我们Andoird课程要求写一个...
    99+
    2022-06-06
    音乐 Android
  • Python实现在线音乐播放器
    最近这几天,学习了一下python,对于爬虫比较感兴趣,就做了一个简单的爬虫项目,使用Python的库Tkinsert做了一个界面,感觉这个库使用起来还是挺方便的,音乐的数据来自网易云音乐的一个接口,通过r...
    99+
    2022-06-04
    播放器 在线音乐 Python
  • js实现网页音乐播放器
    本文为大家分享了简单的html,音乐播放器制作代码,供大家参考,具体内容如下 首先第一步找图片资源 音乐资源 放入到img文件夹中 第二步对页面布局进行布置 第三步书写js代码 复制...
    99+
    2022-11-12
  • HTML音乐播放器怎么实现
    要实现一个基本的HTML音乐播放器,可以按照以下步骤进行:1. 创建一个`<audio>`元素用于播放音乐,并设置`sr...
    99+
    2023-08-08
    HTML
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作