Qt实现本地音乐播放器

这篇具有很好参考价值的文章主要介绍了Qt实现本地音乐播放器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Qt实现本地音乐播放器,qt

 mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMediaPlayer>
#include <QMediaPlaylist>
namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void init();

    void on_btnAdd_clicked();

    void on_btnPlay_clicked();

    void on_btnPause_clicked();

    void on_btnStop_clicked();

    void on_btnPrevious_clicked();

    void on_btnNext_clicked();

    void on_btnSound_clicked();

    void on_sliderVolumn_valueChanged(int value);

    void on_listWidget_doubleClicked(const QModelIndex &index);

    void on_btnRemove_clicked();

    void on_btnClear_clicked();

    void on_sliderPosition_valueChanged(int value);

private:
    Ui::MainWindow *ui;

    QMediaPlayer *player;
    QMediaPlaylist *playlist;
    QString durationTime,positionTime;//总时间,当前位置的时间
private slots:
    void onStateChanged(QMediaPlayer::State state);//播放状态
    void onPlaylistChanged(int position);
    void onDurationChanged(qint64 duration);
    void onPositionChanged(qint64 position);
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QDir>
#include <QFileDialog>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    init();

}

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

void MainWindow::init()
{
    player=new QMediaPlayer(this);
    playlist=new QMediaPlaylist(this);
    playlist->setPlaybackMode(QMediaPlaylist::Loop);//循环播放
    player->setPlaylist(playlist);
    connect(player,SIGNAL(stateChanged(QMediaPlayer::State)),
            this,SLOT(onStateChanged(QMediaPlayer::State)));
    //状态改变
    connect(player,SIGNAL(durationChanged(qint64)),
            this,SLOT(onDurationChanged(qint64)));
    //歌曲时长
    connect(player,SIGNAL(positionChanged(qint64)),
            this,SLOT(onPositionChanged(qint64)));
    //位置
    connect(playlist,SIGNAL(currentIndexChanged(int)),
            this,SLOT(onPlaylistChanged(int)));
    //当前索引改变

    ui->listWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
}

void MainWindow::on_btnAdd_clicked()
{
    QString curpath=QDir::homePath();
    //qDebug()<<curpath;
    QString dlgTitle="选择音频文件";
    QString filter="mp3文件(*.mp3)";
    QStringList fileList=QFileDialog::getOpenFileNames(this,dlgTitle,curpath,filter);
    if(fileList.count()<1)return ;
    for(int i=0;i<fileList.count();i++)
    {
        QString aFile=fileList.at(i);
        playlist->addMedia(QUrl::fromLocalFile(aFile));
        //qDebug()<<QUrl::fromLocalFile(aFile);
        //qDebug()<<aFile;
        QFileInfo fileInfo(aFile);
        ui->listWidget->addItem(fileInfo.fileName());
        //qDebug()<<fileInfo.fileName();
    }
    if(player->state()!=QMediaPlayer::PlayingState)
        playlist->setCurrentIndex(0);
    player->play();
}

void MainWindow::on_btnPlay_clicked()
{
    if(playlist->currentIndex()<0)
        playlist->setCurrentIndex(0);
    player->play();
}

void MainWindow::on_btnPause_clicked()
{
    player->pause();
}

void MainWindow::on_btnStop_clicked()
{
    player->stop();
}

void MainWindow::on_btnPrevious_clicked()
{
    playlist->previous();
    player->play();
}

void MainWindow::on_btnNext_clicked()
{
    playlist->next();
    player->play();
}

void MainWindow::on_btnSound_clicked()
{
    bool mute=player->isMuted();
    player->setMuted(!mute);
    if(mute){
        ui->btnSound->setIcon(QIcon(":/images/images/volumn.bmp"));
    }
    else{
        ui->btnSound->setIcon(QIcon(":/images/images/mute.bmp"));
    }
}

void MainWindow::on_sliderVolumn_valueChanged(int value)
{
    player->setVolume(value);
}

void MainWindow::on_listWidget_doubleClicked(const QModelIndex &index)
{
    int rowNo=index.row();
    //qDebug()<<index;
    playlist->setCurrentIndex(rowNo);
    player->play();
}

void MainWindow::on_btnRemove_clicked()
{
    int pos=ui->listWidget->currentRow();
    QListWidgetItem *item=ui->listWidget->takeItem(pos);
    delete item;
    playlist->removeMedia(pos);
}

void MainWindow::on_btnClear_clicked()
{
    playlist->clear();
    ui->listWidget->clear();
    player->stop();
}

void MainWindow::on_sliderPosition_valueChanged(int value)
{
    player->setPosition(value);//?
}

void MainWindow::onStateChanged(QMediaPlayer::State state)
{
    ui->btnStop->setEnabled(state==QMediaPlayer::PlayingState);
    ui->btnPause->setEnabled(state==QMediaPlayer::PlayingState);
    ui->btnPlay->setEnabled(!(state==QMediaPlayer::PlayingState));
}

void MainWindow::onPlaylistChanged(int position)
{
    //qDebug()<<position;
    ui->listWidget->setCurrentRow(position);
    QListWidgetItem *item=ui->listWidget->currentItem();
    if(item)
        ui->LabCurMedia->setText(item->text());
}

void MainWindow::onDurationChanged(qint64 duration)
{
    ui->sliderPosition->setMaximum(duration);
    int secs=duration/1000;
    //qDebug()<<secs;
    int mins=secs/60;
    secs=secs%60;
    durationTime=QString::asprintf("%d:%02d",mins,secs);
    ui->LabRatio->setText(positionTime+"/"+durationTime);
}

void MainWindow::onPositionChanged(qint64 position)
{
    if(ui->sliderPosition->isSliderDown())return ;
    ui->sliderPosition->setSliderPosition(position);
    int secs=position/1000;
    int mins=secs/60;
    secs=secs%60;
    positionTime=QString::asprintf("%d:%02d",mins,secs);
    ui->LabRatio->setText(positionTime+"/"+durationTime);
}

qss:

QLabel{
font: 12pt "楷体";
}
QFrame#line_2{
color:rgb(68, 170, 232);
}
#groupBox{
font: 12pt "楷体";
}
QListView {
    outline: none;
}
#listWidget{/*
border-style:solid;
border-color:rgb(69, 173, 237);
border-width:2px;*/
border:none;
}
#listWidget::item {
    background-color: #ffffff;
    color: #000000;
    border: transparent;
    border-bottom: 1px solid #dbdbdb;
    padding: 8px;
}

#listWidget::item:hover {
    background-color: #f5f5f5;
}

#listWidget::item:selected {
    border-left: 5px solid rgb(69, 173, 237);
}


#centralWidget{
background-color: rgb(255, 255, 255);
}

QSlider{
border:none;
}
QSlider::groove:horizontal {
border: 1px solid #bbb;
background: white;
height: 8px;
border-radius: 4px;
}
QSlider::sub-page:horizontal {
background: rgb(69, 173, 237);

border: 1px solid #777;
height: 8px;
border-radius: 4px;
}
QSlider::add-page:horizontal {
background: #fff;
border: 1px solid #777;
height: 8px;
border-radius: 4px;
}
QSlider::handle:horizontal {
  background: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, 
    stop:0.6 #45ADED, stop:0.778409 rgba(255, 255, 255, 255));
border: 1px solid #777;
border-radius:10px;
width: 20px;
margin-top: -6px;
margin-bottom: -6px;

}
QSlider::handle:horizontal:hover {
    background: qradialgradient(spread:pad, cx:0.5, cy:0.5, radius:0.5, fx:0.5, fy:0.5, stop:0.6 #2A8BDA, 
    stop:0.778409 rgba(255, 255, 255, 255));
border: 1px solid #444;
border-radius:10px;
width: 20px;
margin-top: -6px;
margin-bottom: -6px;
}
QPushButton:hover{
border:2px solid rgb(69, 173, 237);
}
QPushButton{
font: 14pt "方正小标宋简体";
color:rgb(108,108,108);
min-width:150px;
max-width:150px;
min-height:50px;
max-height:50px;
border:2px solid rgb(214,214,214);
border-radius:20px;
}
QScrollBar:vertical{

margin:16px 0px 16px 0px;

background-color:rgb(255,255,255);

border:0px;

width:14px;

}

QScrollBar::handle:vertical{

background-color:rgb(69, 173, 237);

border-radius:7px;

width:13px;

}

QScrollBar::handle:vertical:hover{

background-color:rgb(42, 139, 218);

}

QScrollBar::sub-line:vertical{

subcontrol-position:top;

subcontrol-origin:margin;

background-color:rgb(255,255,255);


height:0px;

}

QScrollBar::add-line:vertical{

subcontrol-position:bottom;

subcontrol-origin:margin;

background-color:rgb(255,255,255);


height:0px;

}


QScrollBar::sub-page:vertical,QScrollBar::add-page:vertical{

background-color:rgb(255,255,255);

}

源码:Qt与学习通页面: 记录与Qt相关的代码 - Gitee.com文章来源地址https://www.toymoban.com/news/detail-526661.html

到了这里,关于Qt实现本地音乐播放器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python—实现本地音乐播放器(添加/播放/暂停/下一首/上一首/音量/打开超链接)

    1.样例 2.分析 1.播放器界面 2.功能 2.1播放器界面 button:添加/播放/暂停/下一首/上一首 Scale:音量条 Label 2.2功能 2.2.1添加音乐,选择文件夹,显示文件夹里.Mp3文件 2.2.2播放音乐,开始播放第一首音乐,按钮由\\\"播放\\\"变为\\\"暂停\\\",点击\\\"暂停\\\",变为\\\"播放\\\",播放显示Playing… 2.2.3下一首,点击

    2024年02月04日
    浏览(44)
  • 使用Docker搭建YesPlayMusic并实现公网访问本地云音乐播放器

    本篇文章讲解如何使用Docker搭建YesPlayMusic网易云音乐播放器,并且结合cpolar内网穿透实现公网访问音乐播放器。 YesPlayMusic是一款优秀的个人音乐播放器,可以通过Docker方式快速部署在本地服务器。它拥有美观的界面设计,可以绑定网易云音乐账号,实现歌曲收藏的同步。界面

    2024年02月21日
    浏览(45)
  • html+css+js本地音乐播放器,实现可视化音频频谱

    html+css+js本地音乐播放器,实现可视化音频频谱 之前用swing写了个本地音乐播放器(如下图),但是效果一言难尽,界面丑,功能bug也多,唉 所以后面又重新用html写了个,界面样式和功能方面,比swing写的好看、完善多了。 导入音乐(已完成) 展示列表(已完成) 列表双击

    2024年02月09日
    浏览(48)
  • QT实现视频播放器

    1.我们需要的头文件 2. .cpp文件 3.ui界面      

    2024年02月12日
    浏览(46)
  • 用Qt开发的ffmpeg流媒体播放器,支持截图、录像,支持音视频播放,支持本地文件播放、网络流播放

    本工程qt用的版本是5.8-32位,ffmpeg用的版本是较新的5.1版本。它支持TCP或UDP方式拉取实时流,实时流我采用的是监控摄像头的RTSP流。音频播放采用的是QAudioOutput,视频经ffmpeg解码并由YUV转RGB后是在QOpenGLWidget下进行渲染显示。本工程的代码有注释,可以通过本博客查看代码或者

    2024年02月03日
    浏览(100)
  • 【html本地工具】html+css+js本地音乐播放器,实现可视化音频频谱

    html+css+js本地音乐播放器,实现可视化音频频谱 之前用swing写了个本地音乐播放器(如下图),但是效果一言难尽,界面丑,功能bug也多,唉 所以后面又重新用html写了个,界面样式和功能方面,比swing写的好看、完善多了。 导入音乐(已完成) 展示列表(已完成) 列表双击

    2024年02月14日
    浏览(37)
  • qt实现简单的视频播放器

    2024年02月11日
    浏览(51)
  • QT5.9实现一个视频播放器播放 暂停进度条

    参考博主 1https://blog.csdn.net/liji_digital/article/details/83691035 参考博主2https://blog.csdn.net/qq_41071706/article/details/89855986 通过选择按钮选择本地视频文件 点击播放按钮播放文本框中的文件(不支持其他类型文件的异常检测) 支持mp4 avi等等 如果不支持见参考博主2的内容 点击暂停按钮

    2023年04月22日
    浏览(44)
  • 【OpenCV+Qt】实现简易视频播放器——支持进度条拖动

    OpenCV实现视频播放器,其思路大致就是在线程中使用OpenCV中的VideoCapture循环读取本地视频的每一帧Mat,然后发送到界面转换成QImage进行显示,而进度条拖动则用到了VideoCapture中的set函数,进度条则是使用Qslider;并且通过自定义新的进度条类实现点击跳转功能; 效果: 1.进行

    2023年04月08日
    浏览(52)
  • linux系统中QT里面的视频播放器的实现方法

          大家好,今天主要和大家聊一聊,如何使用QT中视频播放器的方法。   目录 第一:视频播放器基本简介 第二:视频播放器头文件说明  第三:源文件的具体实现方法 第四:运行效果显示        与音乐播放器一样使用 QMediaPlayer 类,不同的是需要使用 setVideoOutput(QVi

    2024年02月04日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包