《Qt5C小白变大牛之初级篇小白是怎么炼成大牛的之初级篇第14章Qt项目实战之视频播放器.docx》由会员分享,可在线阅读,更多相关《Qt5C小白变大牛之初级篇小白是怎么炼成大牛的之初级篇第14章Qt项目实战之视频播放器.docx(6页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Qt5(C+)小白变大牛之初级篇小白是怎么炼成大牛的之初级篇第14章Qt项目实战之视频播放器Qt视频播放器Qt对音视频的播放和控制、相机拍摄、收音机等多媒体应用提供J强大的支持。Qt5使用了全新的Qt Multimedia模块来实现多媒体应用,Qt4中用来实现多媒体功能 的模块已经被移除。新的Qt Multimedia模块提供了丰富的接口,可以轻松地使用平台的多媒体功能。例如 进行媒体播放、使用相机和收音机等。QMediaPlayer 简介QMediaPlayer播放视频要在界面上显示出来,还需要其他类进行辅助,比如 QVi deoWidget 类。QVideoWidget继承自QWidget
2、,所有它可以作为一个普通窗口部件进行显示,也可以 嵌入到其他窗口。将QV i deoW i dge t指定为QMed i aP 1 ay e r的视频输出窗口后,就可以显示播放的视频画面。player = new QMediaPlayer;videoWidget = new QVideoWidget;player-setVideoOutput(videoWidget);v i deoWi dge t-show();player-play();QVideoWidget 简介QvideoWidget是一个用来展示视频的类,需要先定义一个QUediaPlayer对象,然后将QModiaPlayer
3、的 VideoOutput 设置为 QVideoWidget 对象即可QVidcoWidget 属性名称类型说明aspectRatioModeQt:AspectRatioMode显示比率brightnessint亮度contrastint对比度fullScreenbool是否全屏hueint色调mediaObjectQMediaObject *const视频媒体对象saturationint饱和度error: C1083:问题:qt creator 报错 error: C1083:无法打开包括文件:QMediaPlayer”解决:QT += multimedia multimediawidge
4、ts如何获取durationQT关于QMediaplayer的duration。获取的音视频时间长度为0的问题。在QT中,使用QMediaplayer类可以很方便地实现视频的播放,而在QMediaplayer类 中有个duration函数可以直接获取所打开视频的总时间长度。但使用后你会发现duration ()返回的居然痉个官方解释:The value may change across the life time of the QMcdiaPlayer object and may not be avaiIabIe when initial playback begins, connect
5、to the durationChanged() signal to receive status notifications.在初始回放开始时可能不可用,请连接durationChangedO信号以接收状态遁知.即我们只需要写个槽函数,在槽函数里面调用duration ()就可以接收到正确的时间例:第一步:连接槽函数,信号为QMcdiaPlaycr自带的durationChangcd,槽就是自己定义 的getduration,注意参数类型要一致QObject:connect(player,SIGNAL(durationChanged(qint64),this,SLOT(getduration
6、iqinl64);第二步:写槽函数,mediaplay为类名,不同类需要修改这个类名,playtime为总时长 void Widget:gctduration(qint64 playtime) /在这里获取duration(.)playtime = player-duration();)经过以上两步就可以获得正确的时间啦。以卜.再附上把获得的时间转化为时分秒的函数:QString Widget:convertMiHisecToString(qint64 millisec) ( int h, m, s; millisec /= 1000; 获得的时间是以亳秒为单位的 h = (int)milli
7、sec / 3600;m = (int)millisec - h*3600)/60; s = (int)millisec - h*3600 - m*60; 把int型转化为string类型 QString strFormat = QString.arg(h, 2, 10, QChar (1 01) .arg(m, 2, 10, QChar(* O) .arg(s, 2, 10, QChar ( O);return strFormat;双击全屏显示事件过滤器,双击标签VideoWidget,进入全屏事件过滤器:(双击:全屏)bool Widget:eventFi 1 ter(QObject*ob
8、j, QEvent *event) i f (obj = ui-label_Yide。)指定某个 QLabel(/ QEvent:MouseButtonPress, QEvent:MouseButtonDblClick if (cvcnt-type() = QEvent:MouscButtonDblClick) (QMouseEvent *mouseEvent = static Ccist(event); if(mouseEvent-button() = Qt:LeftButton) (i f(!this-isFu11 Screen() this-showFullScreen();)else
9、this-showNormal();)return true;)else(return false;)elsereturn false;else(/ pass the event on to the parent class return Widget:cvcntFiIter(obj, event);按esc退出全屏/处理键盘一按键:按CSC退出全屏void Widget:keyPressEvent(.QKeyEvent*event)switch(event-key()(case Qt:KeyJ:scape:i f (this-isFu11Screen() this-showNormal();
10、)break;default:QWidget:zkeyPressEvent(event);)播放/暂停/停止/随机进度void Widget:on_pushButton_PlayPause_clicked()(i f(m_player-state() = QMediaPlayer:PlayingState) m_playcr-pause();ui-pushButton_PlayPause-selText (播放”);)else if(m_player-state() = QMediaPlayer:PausedState)( m_player-play();ui-pushButton_PlayP
11、ausc-setTcxt(暂停”);void Widget:on_pushButton_Stop_clicked()(/QMediaPlayer:PkiyingStatem player-stop();ui-labcl Currcnt-setTcxt (“00:00:00);ui-label_Duralion-selTexl(“00:00:00);ui-horizontalS 1 ider_progress-setVeilue (0);/按钮状态ui-pushButton_PlayPausc-setEnablod(false);u i -pushButton_Stop-setEnab 1 ed (fa 1 s();ui-pushButton_0penFile-setEnab1ed(true);ui-horizontalSlider progress-setEnabled(ialse);)void Widget:on_horizontalSliderjprogress_valueChanged(int value)m_plairer-setPosit ion (value);