#include "videoplayer.h"
#include "ui_videoplayer.h"
#include <QTime>
#include <QDebug>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "Mylabel.h"
VideoPlayer::VideoPlayer(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::VideoPlayer)
{
ui->setupUi(this);
//固定窗口尺寸(以用户设计窗口为准)
setFixedSize(width(),height());
initWidget(); // 初始化窗口
mediaPlayerInit(); // 媒体播放初始化
//定时器,用于获取视频当前播放时间,毫秒值
this->timer = new QTimer(this);//定时器
connect(timer,&QTimer::timeout,this,&VideoPlayer::on_timeout);
/* 媒体连接信号槽 */
connect(player,SIGNAL(positionChanged(qint64)),this,SLOT(onPositionChanged(qint64)));
//connect(player,SIGNAL(stateChanged(QMediaPlayer::State)),this,SLOT(onStateChanged(QMediaPlayer::State)));
connect(player, SIGNAL(durationChanged(qint64)), this, SLOT(onDurationChanged(qint64)));//视频持续时间,毫秒值 mediaPlayer->duration()可以直接获取
/* 视频进度条和音量调节*/
//自定义的信号costomSliderClicked()
connect(ui->TimeSlider,SIGNAL(costomSliderClicked()),this,SLOT(sliderClicked()));
connect(ui->volumeSlider,SIGNAL(costomSliderClicked()),this,SLOT(volumeSliderClicked()));
/* 图标连接信号槽 自定义的信号clicked()*/
connect(ui->openVideoLabel,SIGNAL(clicked()),this,SLOT(openVideoClicked()));//打开文件
connect(ui->playMode,SIGNAL(clicked()),this,SLOT(labelClicked()));//循环播放
connect(ui->preLabel,SIGNAL(clicked()),this,SLOT(preLabelClicked()));//上一集
connect(ui->nextLabel,SIGNAL(clicked()),this,SLOT(nextLabelClicked()));//下一集
connect(ui->accelerateLabel,SIGNAL(clicked()),this,SLOT(MediaFastForwardClicked())); //快进
connect(ui->moderateLabel,SIGNAL(clicked()),this,SLOT(MediaDrawBackClicked()));//后退
connect(ui->playVideoLabel,SIGNAL(clicked()),this,SLOT(MediaPlayClicked()));//播放/暂停
connect(ui->volumeLabel,SIGNAL(clicked()),this,SLOT(volumeClicked()));//小喇叭设置静音/声音
connect(ui->listLabel,SIGNAL(clicked()),this,SLOT(listLabelClicked()));//展开视频列表
//视频播放列表widget向主界面发送信号,主界面与其连接,获取数据
connect(ui->widget,SIGNAL(sendData(QList<QString>,int)),this,SLOT(getData(QList<QString>,int)));
}
VideoPlayer::~VideoPlayer()
{
delete player;
delete mediaPlaylist;
delete ui;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//初始化窗口
void VideoPlayer::initWidget(){
/* 视频窗口 */
// videoWidget = new QVideoWidget();
// videoWidget->setStyleSheet("border-image: none;" "background: transparent;""border:none");
// videoWidget->setMinimumSize(500, 480); // 视频窗口大小
OriginWidth = width();
setWindowOpacity(0.98);
QPalette pal = palette();
pal.setColor(QPalette::Background, QColor( 230, 230, 250));
setPalette(pal);
//this->setStyleSheet("background-color:rgba(240,255,255,0.5)");
QGraphicsScene * scene = new QGraphicsScene(this);
ui->graphicsView->setScene(scene);
ui->graphicsView->setBackgroundBrush(QColor(0, 0, 0)); // 设置黑色背景
videoItem = new QGraphicsVideoItem;
videoItem->setSize(QSize(ui->graphicsView->width(),ui->graphicsView->height()));
videoItem->setFlags(QGraphicsItem::ItemIsMovable|
QGraphicsPathItem::ItemIsSelectable|
QGraphicsItem::ItemIsFocusable);
scene->addItem(videoItem);
ui->graphicsView->setStyleSheet("border-image: none;" "background: transparent;""border:none");
ui->graphicsView->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // 隐藏垂直滚动条
ui->graphicsView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // 隐藏水平滚动条
//UI控件的样式设计
ui->volumeSlider->setStyleSheet(
"QSlider::groove:horizontal{"
"border:1px solid skyblue;"
"background-color:skyblue;"
"height:10px;"
"border-radius:5px;"
"}"
"QSlider::handle:horizontal{"
"background:qradialgradient(spread:pad,cx:0.5,cy:0.5,radius:0.5,fx:0.5,fy:0.5,stop:0.7 white,stop:0.8 rgb(140,212,255));"
"width:20px;"
"border-radius:10px;"
"margin-top:-5px;"
"margin-bottom:-5px;"
"}"
"#volumeSlider:sub-page:horizontal{"
"background:green;"
"margin:5px;"
"border-radius:5px;}"
);
ui->TimeSlider->setStyleSheet(
"QSlider::groove:horizontal{"
"border:1px solid skyblue;"
"background-color:skyblue;"
"height:10px;"
"border-radius:5px;"
"}"
"QSlider::handle:horizontal{"
"background:qradialgradient(spread:pad,cx:0.5,cy:0.5,radius:0.5,fx:0.5,fy:0.5,stop:0.7 white,stop:0.8 rgb(140,212,255));"
"width:20px;"
"border-radius:10px;"
"margin-top:-5px;"
"margin-bottom:-5px;"
"}"
"#TimeSlider:sub-page:horizontal{"
"background:green;"
"margin:5px;"
"border-radius:5px;}"
);
//打开视频图标
QString openFilePath = ":/images/openFile.png";//图标位置自行调整
QIcon openFileLabelIcon = QIcon(openFilePath);
QPixmap m_openFilelPic = openFileLabelIcon.pixmap(openFileLabelIcon.actualSize(QSize(ui->openVideoLabel->width(),
ui->openVideoLabel->height())));//size自行调整
ui->openVideoLabel->setPixmap(m_openFilelPic);
//设置循环/顺序播放图标
QString filePath = ":/images/seqPlay.png";//图标位置自行调整
QIcon icon = QIcon(filePath);
QPixmap m_pic = icon.pixmap(icon.actualSize(QSize(ui->playMode->width(), ui->playMode->height())));//size自行调整
ui->playMode->setPixmap(m_pic);
//快进播放图标
QString accFilePath = ":/images/accelerate.png";//图标位置自行调整
QIcon accIcon = QIcon(accFilePath);
QPixmap m_accPic = accIcon.pixmap(accIcon.actualSize(QSize(ui->accelerateLabel->width(),
ui->accelerateLabel->height())));//size自行调整
ui->accelerateLabel->setPixmap(m_accPic);
//小喇叭图标
QString volumeFilePath = ":/images/volume.png";//图标位置自行调整
QIcon volumeIcon = QIcon(volumeFilePath);
QPixmap m_volumePic = volumeIcon.pixmap(volumeIcon.actualSize(QSize(ui->volumeLabel->width(),
ui->volumeLabel->height())));//size自行调整
ui->volumeLabel->setPixmap(m_volumePic);
//后退播放图标
QString modFilePath = ":/images/moderate.png";//图标位置自行调整
QIcon modIcon = QIcon(modFilePath);
QPixmap m_modPic = modIcon.pixmap(modIcon.actualSize(QSize(ui->moderateLabel->width(),
ui->moderateLabel->height())));//size自行调整
ui->moderateLabel->setPixmap(m_modPic);
//暂停播放图标
QString playFilePath = ":/images/pause1.png";//图标位置自行调整
QIcon playIcon = QIcon(playFilePath);
QPixmap m_playPic = playIcon.pixmap(playIcon.actualSize(QSize(ui->playVideoLabel->width(),
C++ QT视频播放器1.1
需积分: 0 69 浏览量
更新于2023-06-29
1
收藏 270KB ZIP 举报
**C++ QT视频播放器1.1**
C++ QT视频播放器1.1是一款基于Qt框架开发的多媒体播放软件,它充分利用了Qt库的强大功能,为用户提供了便捷、高效的视频播放体验。Qt是一个跨平台的应用程序开发框架,支持Windows、Linux、macOS等多个操作系统,使得该视频播放器具备了良好的兼容性和移植性。
在这款软件中,开发者运用了C++语言进行编程,C++是一种强大的、面向对象的编程语言,能够提供高性能和灵活性。同时,Qt库为C++开发者提供了丰富的API,用于构建用户界面、处理事件、网络通信以及多媒体等功能。通过结合C++和Qt,视频播放器实现了对多种视频格式的支持,如MP4、AVI、MKV等。
Qt库中的QMediaPlayer类是实现视频播放的核心组件,它可以加载和控制多媒体文件的播放。QMediaPlaylist类则用于管理播放列表,用户可以方便地添加、删除或循环播放多个视频文件。此外,QVideoWidget或QGraphicsVideoItem用于显示视频画面,提供自定义的视频渲染功能。
视频播放器的界面设计也十分重要。Qt提供了一系列的GUI组件,如QPushButton、QLabel、QSlider等,用于创建播放、暂停、停止、快进、快退等控制按钮,以及音量调节滑块和进度条。开发者可以通过信号和槽机制连接这些组件,实现用户交互操作。
为了提供良好的用户体验,播放器还可能包含了其他特性,如字幕支持。Qt的QMultimedia模块允许加载外部字幕文件,并与视频同步显示。此外,视频播放器可能还有音轨切换、视频质量调整、全屏模式等功能。
在软件的实现过程中,开发者可能还需要考虑性能优化。例如,使用硬件加速来提高视频解码速度,减少CPU占用。Qt的多媒体框架支持OpenGL硬件加速,能有效提升视频播放的流畅度。
软件的错误处理和日志记录也是必不可少的。开发者会使用try-catch语句来捕获可能出现的异常,确保程序的稳定运行。同时,通过Qt的日志系统记录程序运行过程中的关键信息,便于后期调试和问题定位。
C++ QT视频播放器1.1是利用C++编程语言和Qt库开发的一款功能齐全、跨平台的多媒体播放软件,它展现了Qt的强大功能和C++的灵活性,为用户带来了高质量的视频播放体验。开发者在设计时兼顾了功能实现、用户交互和性能优化,使得这款播放器成为了一个优秀的软件实例。

呵呵哒( ̄▽ ̄)"
- 粉丝: 2w+
最新资源
- 基于JSP的校园网站的设计与实现论文.doc
- 利用单片机制作简单万年历.doc
- 正确选择财务管理软件[会计实务-会计实操].doc
- 学校开展“2022年网络安全宣传周”活动方案.docx
- 系统集成-大屏监控系统使用说明书.doc
- 普通高中语文教学导向深度学习实践研究方案.doc
- 计算机网络技术模拟试题及答案(最终).doc
- 幼儿园语言文字领导小组网络图.pdf
- 网络防火墙需求分析.doc
- 在Excel中判断单元格是否包含日期【会计实务操作教程】.pptx
- 井下人员定位系统与通信联络系统.ppt
- (源码)基于C++ROS框架的机器人控制系统.zip
- 工程项目管理团队建设.ppt
- 教你如何选择合适的财务软件 .pdf
- 基于单片机的AD转换电路与程序设计.doc
- 网络分析仪E6607C操作指导.ppt