参考文献:《Qt Creator 快速入门》第三版 霍亚飞编著
视频文件可以通过QMediaPlayer进行播放,但是要在界面上显示视频内容,还需要借助QVideaWidget或者QGraphicsVideoItem类,这两个类都属于Qt MultimediaWidgets模块。
上栗子
!!!注意,如果不能播放本地mp4文件,出现运行错误DirectShowPlayerService::doRender: Unresolved error code 0x80040266 (),可能是因为编码不支持,要下载安装K-lite,
参考https://blog.csdn.net/chyuanrufeng/article/details/108021404
新建Qt Widgets应用,名称为myvideowidget,基类选择QWidgte,其他都保持默认。完成后在项目文件中添加如下代码
QT += core gui multimedia multimediawidgets
在widget.h中添加类的前置声明,和私有成员对象
class QMediaPlayer;
class QVideoWidget;
QMediaPlayer* player;
QVideoWidget* videoWidget;
修改布局文件,设置Widget界面的宽度600,高度400。布局文件中添加4个Label和4个Horizontal Slider,分别对对应亮度、对比度、色度和饱和度的控制,4个滑块的mimum都设置为-100,maxmum都设置为100,ui布局大致如下
在widget.cpp文件中添加头文件包含
#include <QMediaPlayer>
#include <QVideoWidget>
在构造函数中初始化player和videoWidget并设置要播放的视频文件。
player=new QMediaPlayer(this);
videoWidget=new QVideoWidget(this);
videoWidget->resize(600,300);
player->setVideoOutput(videoWidget);
player->setMedia(QUrl::fromLocalFile("D:../myvidewidget/大鱼.mp4"));
player->play();
运行程序可以看到播放视频
在构造函数中继续添加代码,使滑块滑动时可以改变视频的亮度,对比度、色相、饱和度同理。代码如下
//亮度
//首先设置slider值为当前视频亮度
ui->brightnessSlider->setValue(videoWidget->brightness());
//信号槽关联,使滑块滑动时改变视频亮度
connect(ui->brightnessSlider,&QSlider::sliderMoved,videoWidget,&QVideoWidget::setBrightness);
//信号槽关联,视频亮度改变时,设置滑块的值
connect(videoWidget,&QVideoWidget::brightnessChanged,ui->brightnessSlider,&QSlider::setValue);
//对比度
ui->contrastSlider->setValue(videoWidget->contrast());
connect(ui->contrastSlider,&QSlider::sliderMoved,videoWidget,&QVideoWidget::setContrast);
connect(videoWidget,&QVideoWidget::contrastChanged,ui->contrastSlider,&QSlider::setValue);
//色相
ui->hueSlider->setValue(videoWidget->hue());
connect(ui->hueSlider,&QSlider::sliderMoved,videoWidget,&QVideoWidget::setHue);
connect(videoWidget,&QVideoWidget::hueChanged,ui->hueSlider,&QSlider::setValue);
//饱和度
ui->saturationSlider->setValue(videoWidget->saturation());
connect(ui->saturationSlider,&QSlider::sliderMoved,videoWidget,&QVideoWidget::setSaturation);
connect(videoWidget,&QVideoWidget::saturationChanged,ui->saturationSlider,&QSlider::setValue);