QT5 内置Multimedia开发音乐播放器

摘要:
QT内置的Multimedia把播放器的功能基本都封装了,所以开发起来非常快。新建一个QTWidgetsApplication,打开项目目录下的.pro文件,开头的QT+=coregui后面加上multimedia。打开headers目录下的mainwindow.h文件,开头添加引入#include#include在classMainWindow中添加方法变量privateslots:voidon_playButton_clicked();//一个按键实现播放暂停两个操作voidon_stopButton_clicked();//一个按键实现停止操作voidon_selectFile_clicked();//选取文件private:Ui::MainWindow*ui;QMediaPlayer*voi;//要播放的文件指针boolisPlay=false;//判断按键的状态修改后如下...#include#include#include...classMainWindow:publicQMainWindow{Q_OBJECT...privateslots:voidon_playButton_clicked();voidon_stopButton_clicked();voidon_selectFile_clicked();private:Ui::MainWindow*ui;QMediaPlayer*voi;boolisPlay=false;};...打开sources目录下的mainwindow.cpp文件,把头文件的功能实现#include#include#include#include"mainwindow.h"#include"ui_mainwindow.h"MainWindow::MainWindow:QMainWindow,ui{ui-˃setupUi;this-˃setWindowTitle;voi=newQMediaPlayer();qDebug;ui-˃playButton-˃setEnabled;}MainWindow::~MainWindow(){deleteui;}//一个按键实现播放暂停两个操作voidMainWindow::on_playButton_clicked(){//如果没有在播放if{voi-˃pause();qDebug;this-˃ui-˃playButton-˃setText;this-˃isPlay=!

QT内置的Multimedia把播放器的功能基本都封装了,所以开发起来非常快。我自己参考官方文档和网上的资料做一个自己用。

最简单 的播放器,只有播放,暂停,停止功能,还有打开音乐文件的功能。

新建一个QT Widgets Application,

打开项目目录下的.pro文件,开头的

QT += core gui 后面加上multimedia。

打开forms目录下的mainwindow.ui

默认的窗口下添加3个按钮,分别为播放,停止,打开文件,

对应的ObjectName和后面实现的方法名有关,我自己分别命名为playButton,stopButton,selectFile。

打开headers目录下的mainwindow.h文件,开头添加引入

#include <QSoundEffect>
#include <QMediaPlayer>

class MainWindow中添加方法变量

private slots:
void on_playButton_clicked(); //一个按键实现播放暂停两个操作
void on_stopButton_clicked(); //一个按键实现停止操作
void on_selectFile_clicked(); //选取文件
private:
Ui::MainWindow *ui;
QMediaPlayer *voi; //要播放的文件指针
bool isPlay = false; //判断按键的状态

修改后如下

...
#include <QMainWindow>#include <QSoundEffect>#include <QMediaPlayer>

...class MainWindow : publicQMainWindow
{
    Q_OBJECT

...privateslots:
    void on_playButton_clicked(); 
    void on_stopButton_clicked(); 
    void on_selectFile_clicked(); 

private:
    Ui::MainWindow *ui;
    QMediaPlayer *voi; 
    bool isPlay = false; 
};

...

打开sources目录下的mainwindow.cpp文件,把头文件的功能实现

#include <QFileDialog>#include <QDebug>#include <QMessageBox>
#include "mainwindow.h"#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(newUi::MainWindow)
{
    ui->setupUi(this);
    this->setWindowTitle("音乐播放器");
    voi = newQMediaPlayer();
 qDebug("voi ready");
    ui->playButton->setEnabled(false);

}

MainWindow::~MainWindow()
{
    deleteui;
}


//一个按键实现播放暂停两个操作
voidMainWindow::on_playButton_clicked()
{
    //如果没有在播放
    if(this->isPlay)
    {
        voi->pause();
        qDebug("voi pause");
        this->ui->playButton->setText(tr("播放"));
        this->isPlay = !this->isPlay;
    }
    else  //如果没有在播放
{
        voi->play();
        qDebug("voi play");
        this->ui->playButton->setText(tr("暂停"));
        this->isPlay = !this->isPlay;
    }
}

//一个按键实现停止操作
voidMainWindow::on_stopButton_clicked()
{
    //如果没有在播放
    if(this->isPlay)
    {
        voi->stop();
        qDebug("voi stop");
        this->ui->playButton->setText(tr("播放"));
        this->isPlay = !this->isPlay;
    }

}

//选取要播放的音乐文件
voidMainWindow::on_selectFile_clicked()
{
    //筛选文件,只能选择mp3或wav格式的文件
    QUrl path = QFileDialog::getOpenFileUrl(this, tr("请选择音乐"), QUrl("c:/"), "music(*.mp3 *.wav)");

    //选取文件后自动播放
    if(!path.isEmpty())
    {
        qDebug("file ready");
        voi->setMedia(path);
        ui->playButton->setEnabled(true);

        voi->play();
        qDebug("voi play");
        this->ui->playButton->setText(tr("暂停"));
        this->isPlay = !this->isPlay;
    }
}

参考文章 https://zhuanlan.zhihu.com/p/113188097

免责声明:文章转载自《QT5 内置Multimedia开发音乐播放器》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇抓包工具Fiddler的简单使用gitlab发送邮件配置下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

CPU亲和度

CPU亲和度(CPU Affinity),就是将一个进程或者线程强制绑定在CPU的某一个core上运行。 参考:https://www.cnblogs.com/zhangxuan/p/6427533.html https://www.cnblogs.com/LubinLew/p/cpu_affinity.html demo是将ljj_test进程强制绑定在...

AWTK 中 LCD 接口的四种实现方式

LCD 接口的四种实现方式 LCD 是对显示设备的抽象,提供了基本的绘图函数。自己去实现 LCD 接口虽然不难,但是需要花费不少功夫,AWTK 提供了几种缺省的实现,利用这些缺省的实现,在移植到新的平台时,一般只需要很少的代码就行了。 下面我们介绍一下几种常见的 LCD 实现方式: 一、基于寄存器实现的 LCD 在低端的嵌入式平台上,内存只有几十 KB...

Qt5 任务栏托盘功能实现

23333 有一阵子没写博客了,研究了挺长时间qt,学到任务栏托盘时简直无语,网上找得到的代码大多是废码,Qt5不支持或者本身就有毛病不能实现却被n多人转来转去的,甚是无语。 简单托盘功能以下在Qt5.5编译通过: #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow>...

Qt使用.lib静态库和.dll动态库文件

我安装的环境是Qt_5_8_0_MSVC2015_64bit,或许不同环境下编译有所不同,我就我自己的安装环境进行叙述一下吧。 1.添加一个新项目,作为静态库项目 2.选择静态库,并完成就可以了 这时候发现生成的项目是个空项目,需要我们自己进行添加.h和.cpp文件,我们建立两个文件mylib.h和mylib.cpp文件,代码如下: mylib.h #...

UCOSIII任务创建

UCOSIII任务创建: 首先要确保UCOSIII移植成功; 一般以下几个步骤就行了: 第一步:写好任务所需的 优先级、堆栈、控制块等; 然后顺便声明下任务函数; 第二步:开始创建函数 源码: 1 #include "led.h" 2 #include "delay.h" 3 #include "sys.h" 4 #include "usart.h"...

004.UDP--拼接UDP数据包,构造ip头和udp头通信(使用原始套接字)

一.大致流程: 建立一个client端,一个server端,自己构建IP头和UDP头,写入数据(hello,world!)后通过原始套接字(SOCK_RAW)将包发出去。 server端收到数据后,打印UDP数据并发送确认消息(yes),client收到yes后将其打印。 二.其中: client端IP:192.168.11.104 端口:8600 ser...