本文通过实例代码给大家介绍了基于夸脱实现视频播放器功能,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
目录
一、功能介绍二、代码三、运行
一、功能介绍
能实现视频播放
二、代码
主窗口。h
#ifndef MAINWINDOW_H
#定义主窗口_H
#包含QMainWindow
#包含QMediaPlayer
#包含q媒体播放列表
#包括q按钮
#包含QSlider
#包含QVBoxLayout
#包含QHBoxLayout
#包含QListWidget
#包含QLabel
#包含QSpacerItem
#包含QVideoWidget
/* 媒体信息结构体*/
结构MediaObjectInfo {
QString文件名;//用于保存视频文件名
QString文件路径;//用于保存视频文件路径
};
类主窗口:公共QMainWindow
{
q _对象
公共:
主窗口(q widget * parent=nullptr);
~主窗口();
/* 属性*/
私人:
QMediaPlayer * videoPlayer//媒体播放器,用于播放视频
QMediaPlaylist * mediaPlaylist//媒体列表
QVideoWidget * videoWidget//视频显示窗口
QListWidget * videoListWidget//视频列表
q滑块*播放进度滚动条;//播放进度条
QSlider * volumeScrollBar//音量条
q按钮*按钮[5];//视频播放器按钮
qhbox布局* hbox布局[3];//水平布局
q widget * hwid get[3];//水平容器
QLabel * label[2];//标签文本
q widget * v widget[2];//垂直容器
qvbox布局* vbox布局[2];//垂直布局
/* 函数*/
公共:
void init小部件();//初始化窗口
void mediaPlayerInit();//媒体播放初始化
void scanVideoFiles();//扫描本地视频文件
/* 槽函数*/
公共插槽:
void SltBtnPlayClicked();//播放点击
void SltBtnNextClicked();//下一首点击
void SltBtnVolumeDownClicked();//声音加点击
void SltBtnVolumeUpClicked();//声音减点击
void SltBtnFullScreenClicked();//全屏点击
void sltvideolistwidgetliked(qlistwidgetem *);//视频列表点击
void sltmediaplaylistcurrentidexchange(int);//媒体当前项改变
void SltMediaPlayerStateChanged(q media player:State);//媒体播放状态改变
void SltMediaPlayerDurationChanged(qint 64);//媒体时长发生变化
void SltMediaPlayerPositionChanged(qint 64);//媒体当前播放时间发生变化
void sltplayprogressscrollbarreased();//播放进度条
void sltvolumescrollbarreased();//音量进度条
void resize事件(QResizeEvent * event);
};
#endif //MAINWINDOW_H
主窗口。卡片打印处理机(Card Print Processor的缩写)
#包含"主窗口. h "
#包含QCoreApplication
#包含QDir
QString视频文件路径=/home/Lua Tao/Qt/video player/my video ;
主窗口:主窗口(q widget * parent)
:QMainWindow(父)
{
init widget();//初始化窗口
mediaPlayerInit();//媒体播放初始化
扫描视频文件();//扫描本地视频
/* 按钮连接信号槽*/
connect(button[0],SIGNAL(clicked()),this,SLOT(SltBtnPlayClicked());//播放
连接(按钮[1],信号(clicked()),this,SLOT(SltBtnNextClicked());//下一首
connect(按钮[2],信号(clicked()),this,SLOT(SltBtnVolumeDownClicked());//声音减
连接(按钮[3],信号(clicked()),this,SLOT(SltBtnVolumeUpClicked());//声音加
连接(按钮[4],信号(clicked()),this,SLOT(SltBtnFullScreenClicked());//全屏
/* 列表连接信号槽*/
connect(videoListWidget,SIGNAL(item clicked(qlistwidgetem *)),this,SLOT(sltvideolistwidgetclicked(qlistwidgetem *));
/* 媒体连接信号槽*/
connect(mediaPlaylist,SIGNAL(current exchange(int)),this,sltmediaplaylistcurrentexchange(int));
connect(videoPlayer,SIGNAL(State changed(q媒体播放器:State))、this、SltMediaPlayerStateChanged(q媒体播放器:State));
connect(videoPlayer,SIGNAL(durationChanged(qint64))、this、SltMediaPlayerDurationChanged(qint 64));
connect(videoPlayer、signal(position changed(qin64))、this、sltmediaplayerposition changed(Qin 64));
/*滚动条连接*/
connect(play progress scroll bar、signal(slide rre legialized())、this、slot(sltplayprogresscrollbarrialized());
connect(volumeScrollBar、signal(slide legalized())、this、slot(sltv volumes scroll barralized());
}
主窗口:~主窗口()
{
}
/**
* @信件Widget:initWidget
*初始化窗口
*/
请参阅MainWindow:initWidget()
{
this-setGeometry(0,0,800,480);
qpa pal
伙计。设置颜色(qp调色板:windowtext,Qt:white);//设置窗口文字为白色
/*构造对象*/
for(int I=0);i3;和:(一)>
/*水平容器*/
hWidget[i]=新q widget();
hwid get[I]-setautofilbackground(true);
/*水平布局*/
hboxllayout[I]=new qhboxllayout();
}
for(int I=0);i 2个;>
/*垂直容器*/
v widget[I]=new q widget();
v widget[I]-setautofilbackground(true);
/*垂直布局*/
vbox layout[I]=new qvbox layout();
}
/*标签*/
for(int I=0);i 2个;>
标签[I]=new q label();
}
/*按键*/
for(int I=0);i5;和:(一)>
push button[I]=new qush button();
按钮[I]-set maximize(44.44);
普希金[I]-setmin大小(44.44);
}
/*设置按钮的属性*/
按钮[0]-设置可检查(真);//播放
按钮[4]-设置可检查(真);//全屏
/*设置样式名*/
v widget[0]-setobject名称( v widget 0 );
v widget[1]-setobject名称( v widget 1 );
hwidget[1]-setobject名称( hwid get 1 );
hwidget[2]-setobject名称( hwid get 2 );
按钮[0]-设置对象名称(“BTN _播放”);
按钮[1]-设置对象名称(“BTN _下一个”);
按钮[2]-设置对象名称(“BTN _音量降低”);
按钮[3]-设置对象名称(“BTN _卷向上”);
按钮[4]-设置对象名称(“BTN屏幕”);
qfont
字体。set pixize(18);//字体大小
标签[0]-设置字体;
标签[1]-设置字体;
伙计。设置颜色(qp调色板:windowtext,Qt:white);
标签[0]-设定面板(pal);
标签[1]-设定面板(pal);
标签[0]-七个文字( 00:00 );//播放时间显示
标签[1]-七个文本("/00:00");
/*播放进度条*/
playprogressscrollbar=新q slider(Qt:horizontal);//水平方向
playsprogesscroll bar-setmaximumheight(15);
play progress scroll bar-set object name( duration leader );
/*声音滚动条*/
volumeScrollBar=新建q slider(Qt:horizontal);
音量滚动条-设置范围(0.100);
音量滚动条-setmaximumith(80);
音量滚动条-设置对象名称(“音量滑块”):
音量滚动条-设定值(50);//中间值
/*视频列表*/
视频列表widget=new qlist widget();
视频列表小部件-设置对象名称( list widget ):
视频列表widget-setverticalscrollbar policy(Qt:scroll wa y soff);//隐藏垂直滚动条
视频列表小部件-设置水平滚动条策略(Qt:scroll barayoff);//隐藏水平滚动条
/*视频窗口*/
视频小部件=新建qvideo小部件();
视频小部件设置样式集(边框图像:无;背景:透明;边界:无;
视频小部件-设置最小化(500.480);//视频窗口大小
/*下面是界面布局*/
/*小时0布局*/
v widget[0]-设置最小尺寸(300.480);
v widget[0]-setmaximumith(300);
hboxllayout[0]-添加小部件(视讯widget);//视频窗口左边
hboxllayout[0]-添加widget(v widget[0]);//右边垂直窗口
hwid get[0]-设置布局(hboxllayout[0]);
hboxllayout[0]-设置内容边距(0,0,0,0);
setentrlwidget(hwid get[0]);//只有主窗口-主视窗才能创建中心布局Qwidget(元件)不行
/* V0布局*/
qspaceritem * vspacer 0=新qspace rite(0.80,QSizePolicy:最小值,qsize policy:最大值);
vBoxLayout[0]-addWidget(视讯清单widget);//添加视频列表
vbox布局[0]-addspaceritm(vspacer 0);
vbox布局[0]-设置内容边距(0,0,0,0);
v widget[0]-设置布局(vbox布局[0]);
/* V1布局*/
/*底板部件布局*/
hwid get[1]-setmaximumheight(15);
hwid get[2]-setminimumheight(65);
vbox layout[1]-添加小部件(hwidget[1]);
vbox layout[1]-添加小部件(hwidget[2]);
vbox布局[1]-set lineage(Qt:align center);
v widget[1]-设置布局(vbox布局[1]);
v widget[1]-set arent(this);
vWidget[1]-setGeometry(0,this-height() - 80,this-width()、80);
vbox布局[1]-setcontentmargin(0,0,0,0);
/*位于最上层*/
v widget[1]-raise();
/* H1会布局*/
hboxllayout[1]-添加小部件(playsprogesscroll bar);//播放进度条
hboxllayout[1]-设置内容边距(0,0,0,0);
hwid get[1]-设置布局(hboxllayout[1]);
/* H2布局*/
qspaceritem * hspacer 0=新qspace rite(300,80,QSizePolicy:Expanding,qsize policy:maximum);
hboxllayout[2]-添加调步(20);
hboxllayout[2]-添加小部件(按钮[0]);
hboxllayout[2]-添加调步(10);
hboxllayout[2]-添加小部件(按钮[1]);
hboxllayout[2]-添加调步(10);
hboxllayout[2]-添加小部件(按钮[2]);
hboxllayout[2]-添加widget(音量滚动条);
hboxllayout[2]-添加小部件(按钮[3]);
hboxllayout[2]-添加小部件(标签[0]);
hboxllayout[2]-添加小部件(标签[1]);
hboxllayout[2]-addspaceritm(hspace r 0);
hboxllayout[2]-添加小部件(按钮[4]);
hboxllayout[2]-添加调步(20);
hboxllayout[2]-设置内容边距(0,0,0,0);
hboxllayout[2]-set lineage(Qt:align left | Qt:align top);
hwid get[2]-设置布局(hboxllayout[2]);
}
/**
* @ letter主窗口:媒体播放器初始化
*媒体初始化
*/
请参阅MainWindow:mediaPlayerInit()
{
视频播放器=new qmediaplayer(这个);
media playlist=new qmediaplaylist(this);//播放列表
mediaPlaylist-clear():
视频播放器设置播放列表(媒体播放列表):
video player-setvideoutput(视频小部件);//设置视频输出窗口
media playlist-setplaybackmode(qmediaplaylist:loop);//设置播放模式,循环是列循环
视频播放器-设置音量(50);//设置默认软件音量为百分之五十
}
/**
* @字母主窗口:扫描视频
*扫描视频文件
*/
请参见主窗口:扫描视频()
{
//qdir dir(qcore application:application dirpath()/my video );
QDir dir(视频文件路径);//视频文件路径
qdir dirbsolutesh(dir。绝对epth());//绝对路径
//qdebug()dirbsolutesh final;
if(dirbslutepth。exists()){//如果目录存在
QStringList过滤器;//定义过滤器
/*包含所有二十个后缀的文件*/
过滤器"* .MP4"* .mkv * .wmv * .艾维?艾维?
/*获取该目录下的所有文件*/
qfileinfo列表文件=dirbslutepath。条目列表(筛选器,qdir:files);
for(int I=0);files.count():(I)>
mediaobjectinfo
/*使用utf-8格式编码*/
信息。filename=QS string:from utf8(files。在第(一)节.文件名(). toUtf8().日期();
信息。文件路径=qsstring:fromutf8(文件。在第(一)节.文件路径(). toUtf8().日期();
/*媒体列表添加视频*/
if (mediaPlaylist-addMedia(
qurl:fromlocalfile(信息。文件路径))>
/*添加到容器数组里储存*/
//mediaObjectInfo.append(关于):
/*添加视频名字至列表*/
视频列表小工具外挂程式(信息。文件名);
}否则
qDebug()使用播放列表-错误字符串(). toUtf8().结束日期()。
“qdebug()”错误号:“media playlist-error()end;
}
}
}否则
qDebug()目录不存在结束;
}
}
/**
* @ letter主窗口:sltbtnplayclicked
*播放点击
*/
请参阅主窗口:sltbtnplay单击()
{
int state=视频播放器状态();//获取播放的状态
交换机(状态)>
q media player:stopped state案例:
/*媒体播放*/
视频播放器播放();
打断;打断;
媒体播放器:PlayStation案例:
/*媒体暂停*/
放像机暂停():
打断;打断;
qmediaplayer:暂停状态案例:
视频播放器-play();
打破;
}
}
/**
* @ brief主窗口:sltbtnextclicked
* 下一首点击
*/
void主窗口:SltBtnNextClicked()
{
视频播放器-stop();//停止播放
int count=媒体播放列表-媒体计数();//获取播放列表的视频个数
if (0==计数)
返回;
/* 列表下一个*/
媒体播放列表-next();
视频播放器-play();
}
/**
* @ brief主窗口:sltbtnvolumedownclied
* 声音减点击
*/
void主窗口:SltBtnVolumeDownClicked()
{
/* 点击每次音量-5 */
音量滚动条-setValue(音量滚动条-value()-5);
视频播放器-设置音量(音量滚动条-value());
}
/**
* @ brief主窗口:SltBtnVolumeUpClicked
* 声音加点击
*/
void主窗口:SltBtnVolumeUpClicked()
{
/* 点击每次音量5 */
音量滚动条-setValue(音量滚动条-value()5);
视频播放器-设置音量(音量滚动条-value());
}
/**
* @ brief主窗口:SltBtnFullScreenClicked
* 全屏点击
*/
void主窗口:SltBtnFullScreenClicked()
{
/* 全屏/非全屏操作*/
vWidget[0]-setVisible(!按钮[4]-已检查());
}
/**
* @ brief主窗口:sltvideolistwidgetliked
* 视频列表点击
* @param item
*/
void主窗口:sltvideolistwidgetliked(qlistwidgetem * item)
{
视频播放器-stop();
媒体播放列表-setCurrentIndex(videoListWidget-row(item));//选中点击的项
视频播放器-play();
}
/**
* @ brief主窗口:sltmediaplaylistcurrentidexchange
* 媒体当前项发生改变选中播放列表
* @param索引
*/
void主窗口:sltmediaplaylistcurrentidexchange(int index)
{
if (-1==index)
返回;
/* 设置列表正在播放的项*/
videoListWidget-setCurrentRow(index);
}
/**
* @ brief主窗口:SltMediaPlayerStateChanged
* 媒体播放状态发生改变
* @param状态
*/
void主窗口:SltMediaPlayerStateChanged(q媒体播放器:State状态)
{
开关(状态){
案例QMediaPlayer:停止状态:
按钮[0]-setChecked(假);
打破;
案例QMediaPlayer:播放状态:
按钮[0]-setChecked(真);
打破;
case QMediaPlayer:PausedState:
按钮[0]-setChecked(假);
打破;
}
}
/**
* @ brief主窗口:SltMediaPlayerDurationChanged
* 媒体播放时长发生变化
* @param持续时间
*/
void主窗口:SltMediaPlayerDurationChanged(qint 64持续时间)
{
播放进度滚动条-设置范围(0、持续时间/1000);//设置播放进度条的范围
(同Internationalorganizations)国际组织秒=时长/1000;
(同Internationalorganizations)国际组织分钟=秒/60;
秒%=60;
QString mediaDuration
媒体持续时间。clear();
如果(分钟=10)
mediaDuration=QString:number(分钟,10);
其他
媒体持续时间= 0 QString:number(分钟,10);
如果(秒=10)
媒体持续时间=媒体持续时间: QString:number(秒,10);
其他
媒体持续时间=媒体持续时间:0 QString:number(秒,10);
/* 显示媒体总长度时间*/
label[1]-setText(/媒体持续时间);
}
/**
* @ brief主窗口:SltMediaPlayerPositionChanged
* 媒体当前播放时间发生变化
* @param位置
*/
void主窗口:SltMediaPlayerPositionChanged(qint 64位置)
{
如果(!播放进度滚动条-isSliderDown())//进度条没有按下
playProgressScrollBar-setValue(位置/1000);
(同Internationalorganizations)国际组织秒=位置/1000;
(同Internationalorganizations)国际组织分钟=秒/60;
秒%=60;
QString中间位置
媒体位置。clear();
如果(分钟=10)
mediaPosition=QString:number(分钟,10);
其他
媒体位置= 0 QString:number(分钟,10);
如果(秒=10)
媒体位置=媒体位置: QString:number(秒,10);
其他
媒体位置=媒体位置:0 QString:number(秒,10);
/* 显示现在播放的时间*/
label[0]-setText(媒体位置);
}
/**
* @ brief主窗口:sltplayprogressscrollbarreased
* 播放进度条释放
*/
void主窗口:sltplayprogressscrollbarreased()
{
/* 设置媒体播放的位置*/
视频播放器-设置位置(playprogress滚动条-value()* 1000);
}
/**
* @ brief主窗口:sltvolumescrollbarreased
* 音量进度条释放
*/
void主窗口:sltvolumescrollbarreased()
{
/* 设置音量*/
视频播放器-设置音量(音量滚动条-value());
}
/**
* @brief MainWindow:resizeEvent
* 重绘窗口
* @param事件
*/
void主窗口:resize事件(QResizeEvent *事件)
{
q _未使用(事件);
vWidget[1]-setGeometry(0,this-height() - 80,this-width(),80);
}
主页面
#包含"主窗口. h "
#包括q应用
#包含QFile
int main(int argc,char *argv[])
{
QApplication a(argc,argv);
/* 指定文件*/
QFile文件(:/style。qss’);
/* 判断文件是否存在*/
if (file.exists() ) {
/* 以只读的方式打开*/
文件。open(QFile:ReadOnly);
/* 以字符串的方式保存读出的结果*/
QString样式表=qlatin1字符串(文件。read all());
/* 设置全局样式*/
qApp-setStyleSheet(样式表);
/* 关闭文件*/
文件。close();
}
主窗口w;
w。show();
返回a . exec();
}
style.qss
QWidget {
border-image:URL(:/images/BG。png);
}
QLabel {
边框-图像:无;
}
QWidget#hWidget1 {
边框-图像:无;
背景:透明;
}
QWidget#hWidget2 {
边框-图像:无;
背景:透明;
}
QWidget#vWidget1 {
border-image:URL(/images/mask。png);
背景:# 24252a
}
QWidget#vWidget0 {
边框-图像:无;
}
QListWidget#listWidget {
颜色:白色;
字号:15px
边框:无;
背景: # 20 ffffff ;
边框-图像:无;
}
qlistwidgetlistwidg:项目:活动{
背景:透明;
}
QListWidget#listWidget:item {
背景:透明;
身高:60;
}
qlist widget # list widget:item:selected {
颜色:# 5edcf3
背景:透明;
}
qlist小部件# list小部件:item:hover {
背景:透明;
颜色:# 5edcf3
边框:无;
}
QPushButton # btn _ play {
border-image:URL(:/icons/BTN _ play 1。png);
}
q按钮# BTN _播放:悬停{
border-image:URL(:/icons/BTN _ play 2。png);
}
QPushButton # btn _ play:选中{
border-image:URL(:/icons/BTN _ pause 1。png);
}
QPushButton # btn _ play:选中:悬停{
border-image:URL(:/icons/BTN _ pause 2。png);
}
QPushButton#btn_next {
border-image:URL(:/icons/BTN _ next 1。png);
}
q按钮# BTN _下一个:悬停{
border-image:URL(:/icons/BTN _ next 2。png);
}
QPushButton # btn _ volumedown {
border-image:URL(:/icons/BTN _音量调低1。png);
}
q按钮# BTN _音量降低:悬停{
border-image:URL(:/icons/BTN _音量调低2。png);
}
QPushButton # btn _ volumeup {
border-image:URL(/icons/BTN _ volume up 1。png);
}
q按钮# BTN _音量增大:悬停{
border-image:URL(/icons/BTN _ volume up 2。png);
}
QSlider#durationSlider:手柄:水平{
border-image:URL(/icons/handle。png);
}
QSlider#durationSlider {
边框-图像:无;
}
q滑块#持续时间滑块:添加页面:水平{
border-image:URL(:/images/add _ page。png);
}
QSlider#volumeSlider {
边框-图像:无;
}
q滑块#音量滑块:手柄:水平{
border-image:URL(/icons/handle。png);
}
q滑块#音量滑块:手柄:水平{
背景:透明;
}
q滑块#音量滑块:添加-页面:水平{
border-image:URL(:/images/add _ page。png);
}
QPushButton # btn _ screen {
border-image:URL(:/icons/BTN _全屏1。png);
}
BTN屏幕:悬停{
border-image:URL(:/icons/BTN _全屏2。png);
}
q按钮#btn_screen:选中{
border-image:URL(:/icons/BTN屏幕1。png);
}
q按钮# btn _ screen:选中:悬停{
border-image:URL(:/icons/BTN屏幕2。png);
}
三、运行
到此这篇关于基于夸脱实现视频播放器功能的文章就介绍到这了,更多相关Qt -视频播放器内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!