Qt QMediaPlayer(铺满整个窗口)
来源:互联网 发布:武汉淘宝大学官网 编辑:程序博客网 时间:2024/05/15 11:21
一、QMediaPlayer的定义
(1)QMediaPlayer 官方英文文档链接
http://doc.qt.io/qt-5/qmediaplayer.html
The QMediaPlayer class allows the playing of a media source.
The QMediaPlayer class is a high level media playback class. It can be used to playback such content as songs, movies and internet radio. The content to playback is specified as a QMediaContent object, which can be thought of as a main or canonical URL with additional information attached. When provided with a QMediaContent playback may be able to commence.
QMediaPlayer类是用来做"流媒体播放的"。
QMediaPlayer类是一个高级的多媒体播放类.它可以用来播放歌曲、电影和网络收音机。播放的内容被指定为一个QMediaContent对象,它被看作是一个携带了附加信息的主要或标准的链接。当被提供类一个QMediaContent之后,播放就可以开始了。
(2)QVideoWidget 官方英文文档链接
http://doc.qt.io/qt-5/qvideowidget.html
The QVideoWidget class provides a widget which presents video produced by a media object.
Attaching a QVideoWidget to a QMediaObject allows it to display the video or image output of that media object. AQVideoWidget is attached to media object by passing a pointer to the QMediaObject in its constructor, and detached by destroying the QVideoWidget.
QVideoWidget类提供了一个显示媒体对象产生的视频的控件。
附到QVideoWidget的QMediaObject对象被允许显示它所输出的视频或图像。QVideoWidget在它的构造函数中通过指针的方式附加到QMediaObject。并且在QVideoWidget销毁的时候分离。
二、代码实战
(1)MediaplayerDemo.pro,需要添加2个库文件:
QT += multimedia multimediawidgets
multimedia 的作用是添加 QMediaPlayer、QMediaPlaylist 的支持
multimediawidgets 的作用是添加 QVideoWidget 的支持
(2)mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMediaPlayer>
#include <QMediaPlaylist>
#include <QVideoWidget>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
QMediaPlayer *mediaPlayer;
QVideoWidget *videoWidget;
QMediaPlaylist *mediaPlayerlist;
};
#endif // MAINWINDOW_H
(3)mainwindow.cpp
#include "mainwindow.h"
/*
经过测试发现QMediaPlayer
可以播放flv avi
无法播放f4v mp4
*/
//#define VIDEO_PATH "http://main.gslb.ku6.com/s1/ACa7hh1kZcpp1UCTFEnsTw../1468467796693/37e7ec6d945b1459869c0648b6081609/1470326233540/v140/88/12/2dc532a5188e3abdc9eb54332ab0c511-f4v-h264-aac-244-32-129243.0-4574622-1468439556380-93fa78fb0708942892723c641bc2e01d-1-00-00-00.f4v"
#define VIDEO_PATH "C:/Users/Administrator/Desktop/test_baofeng.avi"
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
mediaPlayer = new QMediaPlayer();
videoWidget = new QVideoWidget();
this->setCentralWidget(videoWidget);
//给VideoWidget画上黑色的背景,这样会更专业点(默认是灰白色的)
QPalette* palette = new QPalette();
palette->setBrush(QPalette::Background, Qt::black);
videoWidget->setPalette(*palette);
videoWidget->setAutoFillBackground(true);
delete palette;
/*
设置播放视频的比例
enum AspectRatioMode {
IgnoreAspectRatio,
KeepAspectRatio,
KeepAspectRatioByExpanding
};
*/
videoWidget->setAspectRatioMode(Qt::IgnoreAspectRatio);
mediaPlayer->setVideoOutput(videoWidget);
//第一种方法:mediaPlayer直接setMedia()
mediaPlayer->setMedia(QUrl::fromLocalFile(VIDEO_PATH));
mediaPlayer->play();
//第二种方法:通过mediaPlaylist来按列表播放
// mediaPlayerlist = new QMediaPlayerlist(mediaPlayer);
// mediaPlayerlist->addMedia(QUrl::fromLocalFile(VIDEO_PATH));
// mediaPlayerlist->setCurrentIndex(0);
// mediaPlayer->play();
}
MainWindow::~MainWindow(){}
三、说明
视频默认按原大小显示,不会随着QVideoWidget的缩放而改变,要想视频根据QVideoWidget动态变化,需要设置 “AspectRatioMode” 参数。
enum Qt::AspectRatioMode
This enum type defines what happens to the aspect ratio when scaling an rectangle.
这个枚举类型定义了,当拉伸QVideoWidget的时候,图片(或视频)的比例会发生什么变化。
ConstantValueDescriptionDefault-1The size is determined by the original size of the videoQt::IgnoreAspectRatio0The size is scaled freely. The aspect ratio is not preserved.Qt::KeepAspectRatio1The size is scaled to a rectangle as large as possible inside a given rectangle, preserving the aspect ratio.Qt::KeepAspectRatioByExpanding2The size is scaled to a rectangle as small as possible outside a given rectangle, preserving the aspect ratio.(1)Default
显示区域的大小根据视频的原始大小而决定,不会随着QVideoWidget的缩放而改变。
(2)Qt::IgnoreAspectRatio
填满QVideoWidget
(3)Qt::KeepAspectRatio
视频等比例缩放,并且尽量铺满QVideoWidget,但不超出QVideoWidget的范围。
(4)Qt::KeepAspectRatioByExpanding
视屏等比例缩放,充满整个QVideoWidget,超出QVideoWidget的范围的部分不显示。
- Qt QMediaPlayer(铺满整个窗口)
- 铺满整个屏幕
- 背景图片铺满整个屏幕
- 图片铺满整个页面
- ImageView铺满整个组件
- 【Qt Multimedia】用QMediaPlayer实现简易播放器(2)详解QMediaPlayer、QVideoWidget、QMediaPlaylist
- qt qmediaplayer m_surface assert
- 如何让一张图铺满整个铺满
- 将activity铺满整个屏幕(去掉title以及状态栏)
- VMware下如何调整Ubuntu显示为铺满整个VMware窗口
- html5绘图铺满整个屏幕
- 让table铺满整个td
- QT实例之十四(qmediaplayer)
- Qt 之QMediaPlayer类详解
- QT QMediaPlayer 播放音视频文件
- Qt实用技巧:在Qt Gui程序中嵌入qml界面(可动态覆盖整个窗口)
- 【Qt Multimedia】用QMediaPlayer实现简易播放器(1)总览Qt Multimedia
- QT基础——解决QTabWidget控件铺满QMainWindow父窗口
- uva12171 sculpture 离散化 3维bfs求面积体积
- ZooKeeper集群搭建详细步骤
- 过滤Servlet--过滤器
- LeetCode | Valid Number
- 【ZOJ3195】Design the City-LCA算法
- Qt QMediaPlayer(铺满整个窗口)
- Magic c++ 一个好的可视化Linux开发工具
- uva12166 修改天平 元素的贡献值-最优解
- 一个巧妙地方式改变input的默认样式
- go1.6.2 strings.Split()我觉得有些问题
- Java虚拟机类加载机制---深入理解Java虚拟机
- Android 使用Android Studio + Gradle 或 命令行 进行apk签名打包
- uva11882 最大的数 bfs 遍历估价剪枝
- mysql笔记一 ----mysql数据库的安装和基础指令