Qt深入浅出(十七)多媒体

多媒体编程

1 音频组件

​ Qt提供的多媒体可以从高层到底层进行访问, 以及处理音频的输出和输入。Qt为了开发基于多媒体的应用程序,可以使用QMediaPlayer类.

  不仅支持从属的压缩音频格式,也支持用户安装的多媒体插件.

        

        播放多媒体使用到QMediaPlayer类,需要在.pro文件中添加QT += multimedia

1.1 最简单的音乐播放器的实现

  • 最简单例子


  
  
  1. QMediaPlayer * player = new QMediaPlayer;
  2. player->setMedia(QUrl::fromLocalFile("c:\\123.MP3"));
  3. player->setVolume(50);
  4. player->play();

1.2 常用函数


  
  
  1. [public slot] void QMediaPlayer::play()    //播放
  2. [public slot] void QMediaPlayer::pause() //暂停
  3. [public slot] void QMediaPlayer::stop() //停止
  4. [public slot] void QMediaPlayer::setVolume(int volume); //设置音量
  5. [public slot] void QMediaPlayer::setMedia(const QMediaContent &media, QIODevice *stream = Q_NULLPTR); //设置多媒体资源.
  6. [public slot] void QMediaPlayer::setPlaylist(QMediaPlaylist *playlist); //设置播放资源
  7. [public slot] void QMediaPlayer::setPosition(qint64 position);  //设置资源位置

  • 一个简单播放器的例子

    widget.h


  
  
  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QWidget>
  4. #include <QMediaPlayer>
  5. #include <QLabel>
  6. class Widget : public QWidget
  7. {
  8.    Q_OBJECT
  9. public:
  10.    Widget(QWidget *parent = 0);
  11.    ~Widget();
  12. public slots:
  13.    void playAudio();
  14. private:
  15.    QMediaPlayer *_player;
  16.    QLabel * _label;
  17. };
  18. #endif // WIDGET_H

​ widget.cpp


  
  
  1. #include "widget.h"
  2. #include <QPushButton>
  3. #include <QVBoxLayout>
  4. #include <QFileDialog>
  5. #include <QHBoxLayout>
  6. #include <QSlider>
  7. Widget::Widget(QWidget *parent)
  8.   : QWidget(parent)
  9. {
  10.    _player = new QMediaPlayer(this);
  11.    /*布局音量滑块*/
  12.    QHBoxLayout* hBox0 = new QHBoxLayout;
  13.    QLabel *label = new QLabel("volume:");
  14.    QSlider* slider = new QSlider;
  15.    slider->setOrientation(Qt::Horizontal);
  16.    slider->setRange(0, 100);
  17.    slider->setValue(_player->volume());
  18.    hBox0->addWidget(label);
  19.    hBox0->addWidget(slider);
  20.    /*布局控制按钮*/
  21.    QHBoxLayout* hBox1 = new QHBoxLayout;
  22.    QPushButton* pb0 = new QPushButton("open");
  23.    QPushButton* pb1 = new QPushButton("play");
  24.    QPushButton* pb2 = new QPushButton("pause");
  25.    QPushButton* pb3 = new QPushButton("stop");
  26.    hBox1->addWidget(pb0);
  27.    hBox1->addWidget(pb1);
  28.    hBox1->addWidget(pb2);
  29.    hBox1->addWidget(pb3);
  30.    /*窗口布局*/
  31.    QVBoxLayout* vBox = new QVBoxLayout;
  32.    _label = new QLabel("please open a mp3 file", this);
  33.    vBox->addWidget(_label, 2);
  34.    vBox->addLayout(hBox0, 1);
  35.    vBox->addLayout(hBox1, 1);
  36.    this->setLayout(vBox);
  37.    /*信号链接*/
  38.    connect(pb0, SIGNAL(clicked()), this, SLOT(playAudio()));
  39.    connect(pb1, SIGNAL(clicked()), _player, SLOT(play()));
  40.    connect(pb2, SIGNAL(clicked()), _player, SLOT(pause()));
  41.    connect(pb3, SIGNAL(clicked()), _player, SLOT(stop()));
  42.    connect(slider, SIGNAL(valueChanged(int)), _player, SLOT(setVolume(int)));
  43.    connect(_player, SIGNAL(volumeChanged(int)), slider, SLOT(setValue(int)));
  44. }
  45. void Widget::playAudio()
  46. {
  47.    QString filename = QFileDialog::getOpenFileName(this, "MP3", "", "(*.mp3)");
  48.    if(QFileInfo(filename).isReadable())
  49.   {
  50.        _label->setText(QFileInfo(filename).fileName());
  51.        _player->setMedia(QUrl::fromLocalFile(filename));
  52.   }
  53. }
  54. Widget::~Widget()
  55. {
  56. }

1.3 播放列表的使用

​ 上面简单的播放器,每次只能设置一首歌曲,如果想实现多首歌曲播放,可以使用多媒体播放列表类QMediaPlayList。

  • 带播放列表的播放


  
  
  1. QMediaPlayer * player = new QMediaPlayer;
  2. QMediaPlayList * playlist = new QMediaPlayList
  3. player-> setPlaylist(playlist);
  4. playlist ->addMedia(QUrl::fromLocalFile("c:\\123.mp3"));
  5. playlist->addMedia(QUrl("http://example.com/123.mp3"));
  6. player->play();

  • QMediaPlayList一些常用函数


  
  
  1. void QmediaPlayList::setCurrentIndex(int playlistPosition)//设置当前播放的资源索引.
  2. void QmediaPlayList::setPlaybackMode(PlaybackMode mode)   //设置播放模式,循环播放,随机播放等
  3. void QmediaPlayList::next() //播放下一首
  4. void QmediaPlayList::previous() //播放前一首
  5. bool QmediaPlayList::addMedia(const QMediaContent &content; //添加资源
  6. bool QmediaPlayList::removeMedia(int pos); //移除某一个资源
  7. bool QmediaPlayList::clear() //移除所有资源

2 视频播放组件

​ Qt提供的多媒体功能能够打开并控制从低层到高层的视频数据,而且可以重叠(Overlap)使用音频以及视频数据。

  为了能使用c++处理视频数据的多媒体程序,使用QMediaPlayer类实现视频编码。使用QVideoWidget和QGraphicsVideoItem类将视频数据显示到界面中。

         需要在.pro文件中添加QT+= multimedia  multimediawidgets

2.1 使用QVideoWidget播放视频

​ widget.h


  
  
  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QWidget>
  4. #include <QMediaPlayer>
  5. #include <QVideoWidget>
  6. #include <QMediaPlaylist>
  7. class Widget : public QWidget
  8. {
  9.    Q_OBJECT
  10. public:
  11.    Widget(QWidget *parent = 0);
  12.    ~Widget();
  13. public slots:
  14.    void playVideo();
  15. private:
  16.    QMediaPlayer *_player;
  17.    QVideoWidget *_videoWidget;
  18.    QMediaPlaylist *_playList;
  19. };
  20. #endif // WIDGET_H

​ widget.cpp


  
  
  1. #include "widget.h"
  2. #include <QPushButton>
  3. #include <QVBoxLayout>
  4. #include <QFileDialog>
  5. Widget::Widget(QWidget *parent)
  6.   : QWidget(parent)
  7. {
  8.    this->resize(600, 480);
  9.    _player = new QMediaPlayer(this);
  10.    _videoWidget = new QVideoWidget(this);
  11.    _playList = new QMediaPlaylist(this);
  12.    _player->setPlaylist(_playList);
  13.    _player->setVideoOutput(_videoWidget);
  14.    QPushButton * pb = new QPushButton("play", this);
  15.    QVBoxLayout * vBox = new QVBoxLayout(this);
  16.    vBox->addWidget(_videoWidget, 5);
  17.    vBox->addWidget(pb);
  18.    this->setLayout(vBox);
  19.    connect(pb, SIGNAL(clicked()), this, SLOT(playVideo()));
  20. }
  21. void Widget::playVideo()
  22. {
  23.    QString filename = QFileDialog::getOpenFileName(this, "MP3", "", "(*.mp4 *.wmv)");
  24.    if(QFileInfo(filename).isReadable())
  25.   {
  26.        _playList->addMedia(QUrl::fromLocalFile(filename));
  27.        _player->play();
  28.   }
  29. }
  30. Widget::~Widget()
  31. {
  32. }

2.2 使用QGraphicsVideoItem播放视频

​ widget.h


  
  
  1. #ifndef WIDGET_H
  2. #define WIDGET_H
  3. #include <QGraphicsView>
  4. class GraphicsView : public QGraphicsView
  5. {
  6.    Q_OBJECT
  7. public:
  8.    GraphicsView(QWidget *parent = 0);
  9.    ~GraphicsView();
  10. };
  11. #endif // WIDGET_H

​ widget.cpp


  
  
  1. #include "widget.h"
  2. #include <QGraphicsScene>
  3. #include <QGraphicsVideoItem>
  4. #include <QMediaPlayer>
  5. GraphicsView::GraphicsView(QWidget *parent)
  6.   : QGraphicsView(parent)
  7. {
  8.    this->resize(600, 480);
  9.    QMediaPlayer * player = new QMediaPlayer(this);
  10.    QGraphicsScene* scene = new QGraphicsScene(this);
  11.    QGraphicsVideoItem * item = new QGraphicsVideoItem;
  12.    item->setFlag(QGraphicsItem::ItemIsMovable);
  13.    scene->addItem(item);
  14.    this->setScene(scene);
  15.    player->setVideoOutput(item);
  16.    player->setMedia(QUrl::fromLocalFile("E:\\123.wmv"));
  17.    player->play();
  18. }
  19. GraphicsView::~GraphicsView()
  20. {
  21. }

基于QT完成的集计算器、电子相册、相机、记事本、多媒体音乐播放器、2048小游戏为一体的多媒体系统,有系统语音提示等。(遇到问题可以评论,注意注册和登录密码等数据默认保存在C盘下的Database文件夹下,使用前需先在C盘新建一个Database命名的文件夹) 项目使用软件: QtCreate5.12 项目使用模块: 数据库 GUI 界面设计 多媒体 摄像头 截图 文字转语音 动画显示 界面包含内容 一、 开机动画界面设计(自定义图片显示,图片放置欢迎字样) 二、 登录注册设计 注: 1. 注册 数据库+MD5 加密 让用户自由注册 a. 点击注册跳转到账户注册界面、点击注册中返回可以返回登录界面 b. 注册界面数据设置为不为空,用户名和用户账号不能有重复 c. 确认注册进行数据的插入,字段:用户名、性别、账户、密码 注册成功:消息盒子提示成功,清空输入框的内容 注册失败:消息盒子提示用户存在 d. 取消注册清空所有输入框内容 e. 限定输入框的输入长度,在对应的输入框设置提示内容 f. 如何确定选择的是男还是女提示:if 判断 ui-> QRadioButton->isChecked() 2. 登录 通过查阅数据库进行对比登录 成功登录:消息盒子提示成功,播报用户名,跳转到主界面 失败登录:消息盒子提示失败,清空账户和密码 3. 输入框设计为椭圆状,设置输入提示字符 4. 按钮设置点击和触摸时颜色切换效果或者使用图片作为背景 5. 界面背景设置为图片,标题设置为中文,图标设置为图片 三、 主界面设计 1. 按钮设置点击和触摸时颜色切换效果或者使用图片作为背景 2. 界面背景设置为图片,标题设置为中文,图标设置为图片 3. 时间显示控件自由选择 4. 进入其他界面操作时进行语音提示 5. 所有子界面能够返回主界面,在返回主界面时进行消息盒子提示 6. 设置所有子界面的标题文字
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值