版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Qt6.2/C++程序设计与桌面应用开发21世纪高等学校计算机类课程创新规划教材–微课视频版教材目录第1章初识Qt框架第2章Qt开发基础第3章界面设计组件第4章主框架窗口第5章对话框设计第6章事件系统第7章文件与数据库第8章模型/视图结构第9章图形绘制第10章多媒体编程第11章网络编程第12章进程与线程教材目录第9章图形绘制9.1Qt绘图基础9.2基本图形绘制9.3图像绘制9.4其他绘制9.5坐标变换9.1Qt绘图基础Qt提供了强大的二维绘图系统,可以使用相同的函数在屏幕和绘图设备上进行绘制。Qt绘图主要基于3个类,即QPainter、QPaintDevice和QPaintEngine在Qt的绘图系统中,具体的绘制操作由QPainter类来完成,QPainter类提供了大量高度优化的函数,来完成GUI编程中所需要的大部分图形绘制工作。9.1.1简单实例QPainter通常在一个窗口的重绘事件(QPainterEvent)的处理函数paintEvent()中进行图形的绘制;在绘图之前需要重新实现窗口的QWidget::paintEvent()事件处理函数,并准备好画笔(QPen)、画刷(QBrush)和字体(QFont)等绘图资源。【例9.1】二维图形绘制简单示例。(1)启动QtCreator集成开发环境,创建一个名称为examp9_1、类型为QtWidgetsApplication的Qt应用程序,选择QWidget主窗口基类,取消“Generateform”选项的勾选。(2)在主窗口类Widget的头文件widget.h中添加重绘事件处理函数的声明。代码如下:(3)在主窗口类Widget的实现文件widget.cpp中添加重绘事件处理函数的实现代码。(4)构建并运行程序。9.1.2QPainter类从例9.1中的程序代码可以看出,QPainter对象完成了所有的图形绘制工作,包括绘图资源的准备以及具体图形的绘制。QPainter可以在继承自QPaintDevice类的任何对象上进行绘制操作,它没有父类,只有一个直接子类QStylePainterQPainter类的对象通过其构造方法创建。原型如下:QPainter(QPaintDevice*device)或QPainter()其中,参数device是QPaintDevice类的对象,即绘图设备,表示在该部件上进行绘制操作。使用这个构造函数创建的对象会立即开始在设备上绘制,自动调用begin()函数,然后在QPainter的析构函数中调用end()函数结束绘制。如果在构建QPainter对象时不想指定绘制设备,那么可以使用不带参数的构造函数,然后使用QPainter的begin()成员函数在开始绘制时指定绘制设备,等绘制完成后再调用end()函数结束绘制操作。QPainter::begin()函数的原型如下:voidQPainter::begin(QPaintDevice*device)其中,参数device表示绘图设备。Qt用QPen类来表示画笔。画笔是用于绘制直线和图形轮廓的绘图工具,其属性包括线型、线宽和颜色等。1、创建画笔创建画笔有2种方法:一种是调用QPainter类的setPen()函数,通过设置颜色或样式来创建;另一种就是使用QPen类的构造函数。9.1.3QPen类QPen类的构造方法有6种重载形式,原型如下:例如:QPenpen(QColor(255,0,0));构造一个红色、实线、线宽为1个像素的画笔对象;QPenpen(Qt::DashLine);构造一个黑色、虚线、线宽为1个像素的画笔对象。这里的Qt::DashLine表示虚线,是一种画笔样式。2、样式设置Qt的画笔样式就是指它所绘制的线条的样式,用枚举类型Qt::penStyle来表示,其值如表9.3所示。在Qt程序中,使用QPen::setStyle()函数或QPen::style()函数设置或获取画笔的线条样式。例如,下面的代码:QPenpen(Qt::NoPen);if(pen.style()==Qt::NoPen){pen.setStyle(Qt::DashLine);}会将画笔的无线条更改为虚线样式。3、线宽设置使用QPen::setWidth()函数或QPen::width()函数设置或获取画笔的线条的宽度。例如,下面的代码:QPenpen;if(pen.width()==1){pen.setWidth(4);}会将画笔的线宽从1个像素修改为4个像素。4、端点风格设置QPen类的setCapStyle()函数用于设置端点样式。在Qt中,线条的端点样式用枚举类型Qt::PenCapStyle来表示,其值有3种,分别为Qt::FlatCap、Qt::SquareCap和Qt::RoundCap它们的绘图效果如例9.2所示。【例9.2】编写一个Qt应用程序,在主窗口中绘制三条直线,演示Qt线条端点样式的区别。(1)复制例9.1中的应用程序,将项目名称修改为examp9_2。(2)在QtCreator集成开发环境中打开项目examp9_2,修改Widget::paintEvent()函数中的代码。(3)构建并运行程序。图中三条直线从上至下依次设置为Qt::FlatCap、Qt::SquareCap和Qt::RoundCap端点样式。从程序的运行结果可以看出:Qt::FlatCap样式在直线的端点处是平齐的;Qt::SquareCap样式在直线的端点多出了一个正方形;Qt::RoundCap样式在直线的端点处是圆弧形的。5、线条的连接样式设置QPen类的setJoinStyle()函数用于设置线条连接样式。在Qt中,线条的连接样式用枚举类型Qt::PenJoinStyle来表示,其值有4种,分别为Qt::MiterJoin、Qt::BevelJoin、Qt::RoundJoin和Qt::SvgMiterJoin。它们的绘图效果如例9.3所示。【例9.3】编写一个Qt应用程序,在主窗口中绘制直线,演示Qt线条连接样式的区别。(1)复制例9.2中的应用程序,将项目名称修改为examp9_3。(2)在QtCreator集成开发环境中打开项目examp9_3,修改Widget::paintEvent()函数中的代码。如下所示。(3)构建并运行程序,结果如图9.5所示。6、颜色设置使用QPen类的setColor()和setBrush()函数设置画笔颜色。Qt中的颜色使用QColor类的对象来表示,也可以使用Qt::GlobalColor枚举类型中的预定义颜色对象来表示,如表9.4所示。9.1.4QBrush类QBrush类表示画刷对象。画刷用于填充图形,其属性包括填充颜色、填充样式以及材质填充时的材质图片等。QBrush类的部分成员函数及功能如表9.5所示。1、创建画刷在Qt中,创建画刷有2种方法:一种是调用QPainter类的setBrush()函数,通过设置颜色或样式来创建;另一种就是使用QBrush类的构造函数。QBrush类的构造方法有10种重载形式,原型如下:2、样式设置Qt的画刷样式就是指它所用的填充图形的样式,用枚举类型Qt::BrushStyle来表示,如表9.6所示。【例9.4】编写一个Qt应用程序,在主窗口中绘制矩形,演示Qt的画刷填充样式的绘图效果。(1)复制例9.1中的应用程序,将项目名称修改为examp9_4。(2)在QtCreator集成开发环境中打开项目examp9_4,修改Widget::paintEvent()函数中的代码。(3)构建并运行程序。3、颜色设置画刷的颜色设置非常简单,直接调用QBrush::setColor()函数即可。例如,若将画刷设置为黄色,可以使用下面的语句:
brush.setColor(Qt::yellow);当然,也可以在构造画刷对象时就设置其颜色。9.2基本图形绘制QPainter类提供了很多基本图元的绘制功能,包括点、直线、椭圆、矩形、曲线等,由这些基本的图元可以构成复杂的图形。QPainter类中常用的基本图元绘制函数及功能如表9.7所示。9.2.1点和线的绘制点和线的绘制通过调用QPainter类的drawPoint()、drawPoints()和drawLine()、drawLines()、drawArc()、drawPolyline()等函数来完成。1、点的绘制Qt用QPoint
或QPointF类代表一个坐标点。它包含一个横坐标和一个纵坐标,前者数值为int型,后者数值为float型。2、直线的绘制Qt用QLine
或QLineF
代表一条线段,前者数值为int型,后者数值为float型。QPainter类的直线绘制函数drawLine()和drawLines()均具有多种重载形式,以适应不同类型的参数。3、折线的绘制折线的绘制可以通过指定QPoint数组或QPolygon对象来实现,如下所示。4、圆弧的绘制使用QPainter::drawArc()函数绘制圆弧时,需要指定一个长方形区域以及圆弧的起始角度和展开角度。这里角度的单位为(1/16)°,方向为逆时针方向。9.2.2矩形和椭圆的绘制矩形和椭圆的绘制通过调用QPainter类的drawRect()、drawRects()、drawRoundedRect()和drawEllipse()函数来完成。1、矩形的绘制矩形绘制函数的重载形式如下:2、椭圆的绘制使用QPainter::drawEllipse()函数来绘制椭圆,其重载形式如下:9.2.3多边形和扇形的绘制多边形和扇形的绘制通过调用QPainter类的drawPolygon()和drawPie()函数来完成。1、多边形的绘制QPainter::drawPolygon()函数的重载形式如下:2、扇形的绘制QPainter::drawPie()函数的重载形式如下:drawPie(constQRectF&,int,int)drawPie(int,int,int,int,int,int)drawPie(constQRect&,int,int)9.2.4渐变填充图形的绘制渐变是绘图中很常见的一种功能,它把几种颜色混合在一起,让它们能够自然过渡,而不是一下子变成另一种颜色。在Qt中,使用QGradient类(或其子类)
和QBrush类共同实现图形的渐变填充功能。Qt支持3种类型的渐变,分别是线性渐变、辐射渐变和锥形渐变。线性渐变在开始点和结束点之间插入颜色,由QLinearGradient类实现;辐射渐变是在环绕它的圆环间插入颜色,由QRadialGradient类实现;锥形渐变是在圆心周围插入颜色,由QConicalGradient类实现。1、线性渐变线性渐变的范围由2个控制点来定义,第1个控制点用0表示,第2个控制点用1表示,0点和1点连线上的位置对应0~1中间的某个值,这个值由线性插值得到。可以在0点和1点的连线上设置一系列的颜色分割点,并在分割点上设定颜色。【例9.5】编写一个Qt应用程序,在主窗口中绘制矩形,演示Qt的线性渐变填充图形的绘图效果。(1)复制例9.1中的应用程序,将项目名称修改为examp9_5。(2)在QtCreator集成开发环境中打开项目examp9_5,修改Widget::paintEvent()函数中的代码。如下所示。(3)构建并运行程序。2、辐射渐变辐射渐变由一个中心点、半径、一个焦点以及颜色分割点控制。中心点和半径定义一个圆。颜色从焦点向外成辐射状扩散,焦点可以是中心点或圆内的其他点。【例9.6】编写一个Qt应用程序,在主窗口中绘制椭圆,演示Qt的辐射渐变填充图形的绘图效果。(1)复制例9.1中的应用程序,将项目名称修改为examp9_6。(2)在QtCreator集成开发环境中打开项目examp9_6,修改Widget::paintEvent()函数中的代码。如下所示。(3)构建并运行程序。3、锥形渐变锥形渐变由一个中心点和一个角度定义,颜色从X轴正向逆时针偏转一个角度开始,按给定颜色分割点扭转扩散。锥形渐变类QConicalGradient的构造函数有3个,分别是:QConicalGradient(qrealcx,qrealcy,qrealangle)QConicalGradient(constQPointF¢er,qrealangle)QConicalGradient()cx、cy、center是中心点参数;angle表示角度。【例9.7】编写一个Qt应用程序,在主窗口中绘制椭圆,演示Qt的锥形渐变填充图形的绘图效果。(1)复制例9.1中的应用程序,将项目名称修改为examp9_7。(2)在QtCreator集成开发环境中打开项目examp9_7,修改Widget::paintEvent()函数中的代码。(3)构建并运行程序。9.3图像绘制Qt提供了4个用于处理图像数据的类,即QImage、QPixmap、Qpicture和QBitmap,它们都是QPainterDevice
的子类,属于Qt的绘图设备。QImage类主要用于程序的I/O处理,也可以用于对像素的直接访问与操作;QPixmap主要用来在屏幕上显示图像,它对图像在屏幕上的显示进行了优化;QBitmap是继承自QPixmap的方便类,用来处理颜色深度为1的图像,即黑白图像;QPicture用来记录和重放QPaint命令。【例9.8】编写一个Qt应用程序,演示使用QImage类绘制图像的操作方法。(1)复制例9.1中的应用程序,将项目名称修改为examp9_8。(2)在QtCreator集成开发环境中打开项目examp9_8,修改Widget::paintEvent()函数中的代码。如下所示。(3)构建并运行程序。9.4其他绘制在QPainter成员函数中,除了基本图形的绘制函数之外,还有一个名为drawText()的函数和一个名为drawPath()的函数,使用它们绘制文字和路径。9.4.1绘制文字Qt使用QPainter::drawText()函数来绘制文字,如例9.1所示。9.4.1绘制文字【例9.9】编写一个Qt应用程序,在主窗口中绘制文本,演示文本的绘制方法。(1)复制例9.1中的应用程序,将项目名称修改为examp9_9。(2)在QtCreator集成开发环境中打开项目examp9_9,修改Widget::paintEvent()函数中的代码。(3)构建并运行程序。9.4.2绘制路径一个绘图路径就是由多个矩形、椭圆、线条或者曲线等组成的对象。一个路径可以是封闭的,例如矩形和椭圆;也可以是非封闭的,例如线条和曲线。如果要多次绘制一个复杂的图形,可以使用QPainterPath类建立一个绘图路径,然后使用QPainter::drawPath()函数来进行绘制。创建了QPainterPath对象后,可以使用其成员函数lineTo()、cubicTo()、quadTo()等将直线和曲线添加到路径中来,也可以使用addEllipse()、addRect()、addRegion()、addText()等将Qt的其他一些基本图元加入到绘图路径中。【例9.10】编写Qt应用程序,演示路径的绘制方法。(1)复制例9.1中的应用程序,将项目名称修改为examp9_10。(2)在QtCreator打开项目examp9_10,修改Widget::paintEvent()函数中的代码。(3)构建并运行程序。9.5坐标变换Qt的窗口默认采用屏幕坐标系统。该系统以窗口左上角为坐标原点;水平向右方向为X轴正方向;垂直向下方向为Y轴正方向;且坐标的增减以像素为单位。Qt中的坐标变换,主要包括平移、缩放、扭曲和旋转4种类型。9.5.1平移变换在Qt中,坐标系统的平移变换可以采用2种方式,一种是使用QPainter::translate()函数,另一种是使用QTransform类。QPainter::translate()函数的重载形式如下:translate(constQPointF&)translate(constQPoint&)translate(qreal,qreal)参数QPoint或QPointF对象表示新的坐标原点;qreal参数表示沿X轴和Y轴移动的距离。【例9.11】编写一个Qt应用程序,演示坐标平移变换(1)复制例9.1中的应用程序,将项目名称修改为examp9_11。(2)在QtCreator集成开发环境中打开项目examp9_11,修改Widget::paintEvent()函数中的代码。如下所示。(3)构建并运行程序。9.5.2缩放变换对坐标系的缩放使用QPainter::scale()函数
或QTransform::scale()函数。下面是一段坐标系的缩放变换示例代码:9.5.3扭曲变换在Qt中绘图时,对坐标系的扭曲变换使用QPainter::shear()函数或QTransform::shear()函数。下面是一段坐标系的扭曲变换示例代码:9.5.4旋转变换在Qt中绘图时,对坐标系的旋转变换使用QPainter::rotate()函数或QTransform::rotate()函数。它们的函数原型如下:voidQPainter::rotate(qrealangle)或QTransform&QTransform::rotate(qrealangle,Qt::Axisaxis=Qt::ZAxis)其中,参数angle表示旋转角度,正数表示顺时针方向,负数表示逆时针方向;参数axis表示旋转轴,用枚举变量Qt::Axis表示。【例9.12】编写一个Qt应用程序,演示坐标的旋转变换。运行结果如图9.25所示。(1)复制例9.1中的应用程序,将项目名称修改为examp9_12。(2)在QtCreator集成开发环境中打开项目examp9_12,修改Widget::paintEvent()函数中的代码。如下所示。(3)构建并运行程序。课后作业思政本章结束Qt6.2/C++程序设计与桌面应用开发21世纪高等学校计算机类课程创新规划教材–微课视频版教材目录第1章初识Qt框架第2章Qt开发基础第3章界面设计组件第4章主框架窗口第5章对话框设计第6章事件系统第7章文件与数据库第8章模型/视图结构第9章图形绘制第10章多媒体编程第11章网络编程第12章进程与线程教材目录第10章多媒体编程10.1Qt多媒体简介10.2音频处理10.3视频播放10.4视频操作10.1Qt多媒体简介Qt中的多媒体支持是由Qt的多媒体模块(QtMultimedia)来提供的。通过Qt多媒体模块所提供的众多功能不同的类,应用程序就可以轻松利用操作系统所提供的多媒体功能,如媒体播放和摄像设备的使用等,来实现应用程序自身的多媒体功能。10.1.1Qt多媒体功能在Qt6.2中,可以实现的多媒体功能主要有:(1)访问原始音频设备进行输入或输出;(2)低延迟播放音效文件,如*.wav等;(3)播放存放在播放列表中的被压缩的音频和视频文件,如*.mp3、*.mp4等;(4)录制声音并压制文件;(5)使用摄像设备进行预览、拍摄和视频录制;(6)将音频文件解码到内存进行处理。Qt应用程序的多媒体功能,通过QtMultimedia和QtMultimediaWidgets两个模块提供的类来实现。要在Qt应用程序中实现多媒体功能,需要在项目文件中添加如下语句:
Qt+=multimedia如果在项目中使用视频处理功能,还需要同时加入下面的语句:
Qt+=multimediawidgets以便使用QVideoWidget
或QGraphicsVideoItem
类来进行视频的播放。10.1.2Qt多媒体模块Qt的多媒体模块是以附加模块的形式提供的,分为QtMultimedia和QtMultimediaWidgets两个子模块。QtMultimedia子模块提供了一些底层多媒体功能,比如音频的采集和回放、频谱分析、视频的处理等。与Qt5相比较,Qt6.2的Multimedia模块发生了较大的变化,其架构及功能都得到了很好的优化。Qt6.2的QtMultimedia模块类及功能如下表所示。10.2音频处理Qt对音频的处理主要包括音频的输入与输出。音频的输出就是将音频输出到音频播放设备,播放音频文件;音频的输入就是音频数据的采集,也就是声音的录制操作。10.2.1相关Qt类Qt的多媒体模块提供了一系列的音频类,这些类提供了大量的低级和高级方法,来实现音频的输入、输出和处理等多媒体应用功能。这些类主要有:QAudioDevice、QMediaDevices、QaudioInput、QAudioOutput、QAudioFormat、QMediaFormat、QAudioSink、QAudioSource、QMediaPlayer、QMediaRecorder和QSoundEffect等。1、QAudioDevice类该类用于描述音频设备,其部分成员函数及功能如表10.2所示。下面是一段简单的示例代码:2、QAudioOutput类该类用于描述可以与QMediaPlayer
或QMediaCaptureSession
一起使用的音频输出通道。可以使用它选择要使用的物理输出设备、使通道静音或者更改通道的音量等。其部分成员函数及功能如表10.3所示。下面是一段简单的示例代码:构建并运行上述示例代码,程序会播放audio.mp3音频文件。注意需要将audio.mp3音频文件放置在项目的构建目录里。3、QAudioInput类该类用于描述可以与QMediaCaptureSession
一起使用的输入通道。它允许选择要使用的物理输入设备、静音通道和更改通道的音量。QAudioInput类的成员函数及信号函数与QAudioOutput类基本类似,参见表10.3所示。下面给出一段简单的示例代码:构建并运行上述示例代码项目,程序会在电脑的“音乐”目录下生成一个名为“test.m4a”的音频文件,用播放软件播放该文件进行测试。4、QAudioSource类该类用于自定义QAudioDevice
设备,其部分成员函数及功能如表10.4所示。下面是一段简单的示例代码:上述示例代码运行后,会在f:\temp子目录中创建一个名为test.raw的音频文件。5、QAudioFormat类QAudioFormat类对象用于设置音频格式。该类有3个公有属性,即:AudioChannelPosition、ChannelConfig和SampleFormat,分别用于表示通道位置、通道配置和采样格式。其取值如下:10.2.2音频播放在Qt中,音频的播放可以使用多种方式。1、使用QSoundEffect类QSoundEffect类以低延迟方式播放未压缩的音频文件(通常为WAV文件);特别适用于响应用户操作的“反馈”类型声音,例如虚拟键盘声音、弹出对话框的正反馈或负反馈或游戏声音等。【例10.1】使用QSoundEffect类播放音频。(1)启动QtCreator集成开发环境,创建一个名为examp10_1的Qt应用程序。程序主窗口基类设置为QWidget。(2)双击项目中的界面文件widget.ui,打开QtDesigner界面设计工具,设计如图10.2所示的程序主窗口界面。其中,“播放”和“停止”按钮的对象名称分别是playBtn和stopBtn。(3)为程序主窗口中的2个按钮添加clicked()信号槽函数,分别为:
voidon_playBtn_clicked();
voidon_stopBtn_clicked();(4)打开项目文件examp10_1.pro,添加如下代码,将Qt的多媒体模块引入到项目中。
QT+=multimedia(5)打开widget.h文件,添加一个名为effect的QSoundEffect对象指针,并添加QSoundEffect类的前导声明。代码如下阴影部分所示。(6)打开widget.cpp文件,在Widget类的构造函数中添加如下代码。(7)在按钮的槽函数中添加代码,如下所示。(8)构建并运行程序。2、使用QAudioSink类QAudioSink类提供了一个接口,用于将音频数据发送到音频输出设备。其部分成员函数及功能如表10.7所示。【例10.2】使用QAudioSink类播放音频。(1)启动QtCreator集成开发环境,创建一个名为examp10_2的Qt应用程序。程序主窗口基类设置为QWidget。(2)双击项目中的界面文件widget.ui,打开QtDesigner界面设计工具,设计如图10.3所示的程序主窗口界面。(3)打开项目文件examp10_2.pro,添加如下代码,将Qt的多媒体模块引入到项目中。
QT+=multimedia(4)在widget.h文件中添加代码,声明Widget类的成员变量及成员函数。下面是部分代码。(5)在widget.cpp文件中添加代码,实现程序功能。下面是部分代码。(6)构建并运行程序。3、使用QMediaPlayer类QMediaPlayer类用于播放媒体文件,包括音频与视频。该类是一个高级媒体播放类,可以使用它来播放视频媒体文件中的音频。其部分成员函数及功能如表10.8所示。【例10.3】使用QMediaPlayer类播放音频。(1)启动QtCreator集成开发环境,创建一个名为examp10_3的Qt应用程序。程序主窗口基类设置为QWidget。(2)双击项目中的界面文件widget.ui,打开QtDesigner界面设计工具,设计如图10.5所示的程序主窗口界面。(3)打开项目文件examp10_3.pro,添加如下代码,将Qt的多媒体模块引入到项目中。QT+=multimedia(4)在widget.h文件中添加代码,声明Widget类的成员变量及成员函数。下面是部分代码。(5)在widget.cpp文件中添加代码,实现程序功能。下面是部分代码。(6)构建并运行程序。10.2.3音频输入在Qt中,音频输入一般使用QMediaRecorder类来实现。QMediaRecorder类是高层次的实现,输入的音频数据直接保存为文件。QMediaRecorder类
是用于编码和记录QMediaCaptureSession
中生成的媒体数据的类。可以实现音频的录制。其部分成员函数及功能如表10.9所示。【例10.4】示例QMediaRecorder类的简单使用。(1)启动QtCreator集成开发环境,创建一个名为examp10_4的Qt应用程序。程序主窗口基类设置为QWidget。(2)双击项目中的界面文件widget.ui,打开QtDesigner界面设计工具,设计如图10.6所示的程序主窗口界面。其中“录音”和“暂停”按钮为QPushButton对象,对象名分别为recordButton和pauseButton。(3)打开项目文件examp10_4.pro,添加如下代码,将Qt的多媒体模块引入到项目中。QT+=multimedia(4)在widget.h文件中添加代码,声明Widget类的成员变量及成员函数。下面是部分代码。(5)在widget.cpp文件中添加代码,实现程序功能。下面是部分代码。(6)构建并运行程序。10.3视频播放在Qt中播放视频一般使用QMediaPlayer类来完成,该类可以进行视频文件的解码。Qt提供了QVideoWidget和QGraphicsVideoItem
两种视频显示组件。也可以从这两个类继承,来自定义个性化的视频显示组件。10.3.1相关Qt类QtMultimedia模块提供了用于播放和操作视频数据的高级和低级C++类,主要有:QMediaCaptureSession、QMediaPlayer、QMediaRecorder、QVideoFrame、QVideoFrameFormat、QVideoSink和QVideoWidget
等。视频播放涉及到媒体播放器QMediaPlayer类,以及显示组件类QVideoWidget
和QGraphicsVideoItem1、QVideoWidget类QVideoWidget类是一个用于显示媒体对象生成视频或图像的界面组件,若将其附加到QMediaPlayer或QCamera对象上,可以显示这些媒体对象生成的视频或图像。该类包含在QtMultimediaWidgets模块内,使用时需要在项目的配置文件中添加如下语句:
QT+=multimediawidgets将其加载到项目中。QVideoWidget类继承自QWidget,拥有众多的属性及函数。与其父类QWidget相比较,该类增加了2个属性,它们是:Qt::AspectRatioModeaspectRatioMode;和boolfullScreen;其中,aspectRatioMode表示屏幕的纵横比;fullScreen表示全屏属性。与上述2个新增属性相对应,添加了2个公有成员函数,如下所示:Qt::AspectRatioModeaspectRatioMode()constboolisFullScreen()const分别用于获取屏幕纵横比和判断是否全屏。与2个新增属性相对应,又添加了2个信号函数:voidaspectRatioModeChanged(Qt::AspectRatioModemode)voidfullScreenChanged(boolfullScreen)前者当屏幕纵横比发生变化时发射,后者当全屏状态发生改变时发射。QVideoWidget类的使用非常简单,只需要将其对象与媒体播放器关联,并显示组件即可。下面是一段示例代码。2、QGraphicsVideoItem类QGraphicsVideoItem类提供一个图形项,用于显示QMediaPlayer或Qcamera生成的视频。该类继承自QGraphicsObject类,是适用于Graphics/View(图形/视图)模式的图形显示组件。在使用QGraphicsVideoItem显示视频时,可以在显示场景中和其他图形组件同时显示,也可以使用该类的放大、缩小、拖动和旋转等功能。QGraphicsVideoItem类的继承关系如下图所示:10.3.2视频播放在Qt应用程序中播放视频非常容易,只需要将媒体播放器对象与视频显示组件进行关联即可。1、使用QVideoWidget显示组件下面的实例使用QMediaPlayer和QVideoWidget实现视频的播放。【例10.5】编写一个Qt应用程序,示例在QVideoWidget
上播放视频。(1)启动QtCreator集成开发环境,创建一个名为examp10_5的Qt应用程序。程序主窗口基类设置为QWidget。(2)双击项目中的界面文件widget.ui,打开QtDesigner界面设计工具,设计如上图所示的程序主窗口界面。(3)打开项目文件examp10_5.pro,添加如下代码,将Qt的多媒体模块引入到项目中。QT+=multimediaQT+=multimediawidgets(4)在widget.h文件中添加代码,声明Widget类的成员变量及成员函数。下面是部分代码。(5)在widget.cpp文件中添加代码,实现程序功能。下面是部分代码。(6)构建并运行程序。2、使用QGraphicsVideoItem显示组件下面的实例使用QMediaPlayer
和QGraphicsVideoItem
实现视频的播放。【例10.6】编写程序,示例在QGraphicsVideoItem
上播放视频。(1)启动QtCreator集成开发环境,创建一个名为examp10_6的Qt应用程序。程序主窗口基类设置为QWidget。(2)双击项目中的界面文件widget.ui,打开QtDesigner界面设计工具,设计如图10.10所示的程序主窗口界面。(3)打开项目文件examp10_6.pro,添加如下代码,将Qt的多媒体模块引入到项目中。QT+=multimediaQT+=multimediawidgets(4)在widget.h文件中添加代码,声明Widget类的成员变量及成员函数。下面是部分代码。(5)在widget.cpp文件中添加代码,实现程序功能。下面是部分代码。(6)构建并运行程序。QtMultimedia模块提供了几个用于控制照相设备的类,通过它们可以进行照相设备信息的获取、静态图像的拍摄以及视频的录制等操作。10.4视频操作10.4.1相关Qt类在Qt中对照相设备操作涉及到很多的类,其中主要
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年智能感应垃圾桶 厨房家具的卫生升级
- 唐诗基础考查试题及答案呈现
- 石化领域环境管理试题及答案分享
- 艺考初中语文模拟题及答案呈现
- 2026年江苏省公务员考试行政职业能力测验专项训练课件
- 2026年高等教育自学考试《管理学原理00054》练习题及答案
- 临水作业知识试题及答案分享
- 2026年四川省事业单位招聘综合应用能力测试课件
- 河北邯郸市2026届高三第一次模拟检测地理试题
- 关于声音强弱的试题与答案
- 体育场馆设计阶段的重点难点及关键技术控制措施
- 2025医院卫生院安全生产大排查大整改工作方案
- 太空探索与航天科技:初中物理科普教学教案
- 乡镇周转房管理办法
- 低压故障排除培训课件
- 部队卫生员试题及答案
- 《外国美术史》课程教学大纲
- 《建筑施工技术》课件
- 安全保卫组织架构及职责描述
- 2024年学校安全事故典型案例
- PMC-紧急订单作业流程图
评论
0/150
提交评论