qt音频实战

一、Qt音频基础知识

1、QT += multimedia

2、QMediaPlayer类:媒体播放器,主要用于播放歌曲、网络收音机等功能。

3、QMediaPlaylist类:专用于播放媒体内容的列表。

二、界面设计

三、代码

复制代码
#include "mainwindow.h"
#include "ui_mainwindow.h"

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

    m_player = new QMediaPlayer;
    m_playlist = new QMediaPlaylist;

    //设置播放模式
    m_playlist->setPlaybackMode(QMediaPlaylist::Loop);
    m_player->setPlaylist(m_playlist);

    connect(m_player, SIGNAL(statechanged(QMediaPlayer::State)), this, SLOT(onstatechg(QMediaPlayer::State)));
    connect(m_player, SIGNAL(positionChanged(qint64)), this, SLOT(onpstChg(qint64)));
    connect(m_player, SIGNAL(durationChanged(qint64)), this, SLOT(onDrtchg(qint64)));
    connect(m_playlist, SIGNAL(currentIndexChanged(int)), this, SLOT(onplaylistchg(int)));
}

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

void MainWindow::onstatechg(QMediaPlayer::State state)    //按钮状态切换
{
    ui->playBtn->setEnabled(!(state == QMediaPlayer::PlayingState));
    ui->pauseBtn->setEnabled(state == QMediaPlayer::PlayingState);
    ui->stopBtn->setEnabled(state == QMediaPlayer::PlayingState);
}
void MainWindow::onplaylistchg(int pos)                   //播放列表更新
{
    ui->listWidget->setCurrentRow(pos);
    QListWidgetItem *item = ui->listWidget->currentItem();
    if(item)
        ui->nameLab->setText(item->text());

}
void MainWindow::onDrtchg(qint64 drt)                     //歌曲时长
{
    ui->progressBar->setMaximum(drt);

    int sec = drt/1000;
    int min = sec/60;
    sec = sec % 60;

    drtTime = QString::asprintf("%d:%d", min, sec);
    ui->progressLab->setText(pstTime+"|"+drtTime);

}
void MainWindow::onpstChg(qint64 pos)                     //歌曲当前播放位置
{
    if(ui->progressBar->isSliderDown())
        return;

    ui->progressBar->setSliderPosition(pos);

    int sec = pos/1000;
    int min = sec/60;
    sec = sec % 60;

    pstTime = QString::asprintf("%d:%d", min, sec);
    ui->progressLab->setText(pstTime+"|"+drtTime);
}


void MainWindow::on_openFileBtn_clicked()
{
    QString currentpath = QDir::currentPath();
    QString dlgtitle = "请选择音频文件:";
    QString strfilter = "所有文件(*.*);;音频文件(*.mp3);;MP3文件(*mp3)";

    QStringList filelist = QFileDialog::getOpenFileNames(this, dlgtitle, currentpath,strfilter);

    if(filelist.count()<1)
        return;

    for(int i = 0;i < filelist.count(); i++)
    {
        QString afile = filelist.at(i);
        m_playlist->addMedia(QUrl::fromLocalFile(afile)); //添加文件

        QFileInfo fileinfo(afile);
        ui->listWidget->addItem(fileinfo.fileName());
    }

    if(m_player->state()!=QMediaPlayer::PlayingState)
        m_playlist->setCurrentIndex(0);
    m_player->play();
}


void MainWindow::on_playBtn_clicked()
{
    if(m_playlist->currentIndex()<0)
        m_playlist->setCurrentIndex(0);
    m_player->play();
}


void MainWindow::on_pauseBtn_clicked()
{
    m_player->pause();
}


void MainWindow::on_stopBtn_clicked()
{
    m_player->stop();
}


void MainWindow::on_PreviousBtn_clicked()
{
    m_playlist->previous();
}


void MainWindow::on_nextBtn_clicked()
{
    m_playlist->next();
}


void MainWindow::on_volumnBtn_clicked()        //切换音量图标(需要添加图片资源到项目)
{
    bool mute = m_player->isMuted();

    m_player->setMuted(!mute);
    if(mute)
    {
        ui->volumnBtn->setIcon(QIcon(":/icon/volumn.png"));
    }
    else
    {
        ui->volumnBtn->setIcon(QIcon(":/icon/novolume.png"));
    }
}


void MainWindow::on_volumnBar_valueChanged(int value)     //音量调节
{
    m_player->setVolume(value);
}


void MainWindow::on_progressBar_valueChanged(int value)   //进度调节
{
    m_player->setPosition(value);
}
相关推荐
牛十二14 分钟前
mac-intel操作系统go-stock项目(股票分析工具)安装与配置指南
开发语言·前端·javascript
励志不掉头发的内向程序员15 分钟前
从零开始的python学习——文件
开发语言·python·学习
恒森宇电子有限公司17 分钟前
IP5326_BZ 支持C同口输入输出的移动电源芯片 2.4A的充放电电流 支持4LED指示灯
c语言·开发语言·单片机
曼巴UE542 分钟前
UE5.3 C++ 接口初步使用
开发语言·jvm·c++
奔跑的石头_1 小时前
GO语言的主要语法和特性
开发语言
liulilittle1 小时前
UNIX/macOS路由表查询原理与实现
服务器·开发语言·c++·macos·unix·编程语言
HUST1 小时前
C语言 第三讲:分支和循环(上)
c语言·开发语言
Dovis(誓平步青云)2 小时前
《探索C++11:现代语法的性能优化策略(中篇)》
开发语言·c++
再努力"亿"点点2 小时前
爬取m3u8视频完整教程
开发语言·python
一个响当当的名号2 小时前
c++primer 个人学习总结-模板和泛型编程
开发语言·c++·学习