qt6 多媒体开发代码分析(一)

本文详细分析了一个基于Qt的音乐播放器类(MainWindow)的代码,包括QMediaPlayer的使用、音频文件的添加、播放控制、循环播放、事件过滤以及元数据处理等功能。

 音乐播放器关键代码分析

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include    <QMainWindow>

#include    <QtMultimedia>
#include    <QListWidgetItem>


QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE


class MainWindow : public QMainWindow
{
    Q_OBJECT

private:
    QMediaPlayer  *player;      //播放器
    bool    loopPlay=true;      //是否循环播放
    QString  durationTime;      //文件总长度,mm:ss字符串
    QString  positionTime;      //当前播放到位置,mm:ss字符串

    QUrl getUrlFromItem(QListWidgetItem *item);         //获取item的用户数据
    bool eventFilter(QObject *watched, QEvent *event);  //事件过滤处理
public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private slots:
    //自定义槽函数
    void do_stateChanged(QMediaPlayer::PlaybackState state);    //播放器状态发生变化

    void do_sourceChanged(const QUrl &media);   //文件发生变化

    void do_durationChanged(qint64 duration);   //文件长度发生变化

    void do_positionChanged(qint64 position);   //播放位置发生变化

    void do_metaDataChanged();          //元数据发生变化

    //
    void on_btnAdd_clicked();

    void on_btnPlay_clicked();

    void on_btnPause_clicked();

    void on_btnStop_clicked();

    void on_listWidget_doubleClicked(const QModelIndex &index);

    void on_btnClear_clicked();

    void on_sliderVolumn_valueChanged(int value);

    void on_btnSound_clicked();

    void on_sliderPosition_valueChanged(int value);

    void on_btnPrevious_clicked();

    void on_btnNext_clicked();

    void on_btnLoop_clicked(bool checked);

    void on_doubleSpinBox_valueChanged(double arg1);

    void on_btnRemove_clicked();
    
    void on_btnClose_clicked();
    
    void on_doubleSpinBox_textChanged(const QString &arg1);
    
    void on_btnLoop_clicked();
    
    void on_sliderVolumn_actionTriggered(int action);
    
    void on_sliderPosition_actionTriggered(int action);
    
private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

这是一个名为"MainWindow"的类,继承自QMainWindow。它是一个主窗口类,用于创建一个具有音频播放功能的应用程序界面。

在私有成员部分,包含了以下成员变量:

  • player:QMediaPlayer类型的指针,用于控制音频的播放。
  • loopPlay:bool类型,表示是否循环播放音频。
  • durationTime:QString类型的变量,表示音频文件的总时长(以mm:ss格式的字符串表示)。
  • positionTime:QString类型的变量,表示当前音频播放的位置(以mm:ss格式的字符串表示)。

还有两个私有函数:

  • getUrlFromItem(QListWidgetItem *item):从QListWidgetItem中获取用户数据(QUrl类型),用于获取音频文件的URL。
  • eventFilter(QObject *watched, QEvent *event):事件过滤处理函数,用于处理特定的事件。

公有部分包含了构造函数和析构函数。

私有槽函数部分定义了一些槽函数,用于响应相关信号的变化,包括:

  • do_stateChanged(QMediaPlayer::PlaybackState state):播放器状态发生变化的槽函数。
  • do_sourceChanged(const QUrl &media):音频文件发生变化的槽函数。
  • do_durationChanged(qint64 duration):音频文件总时长发生变化的槽函数。
  • do_positionChanged(qint64 position):音频播放位置发生变化的槽函数。
  • do_metaDataChanged():音频文件元数据发生变化的槽函数。

还包括一些其他槽函数,用于响应界面上的按钮点击事件和数值变化等。

最后,私有成员ui是一个指向Ui::MainWindo

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值