第6章Qt5图形与图画课件.ppt
《第6章Qt5图形与图画课件.ppt》由会员分享,可在线阅读,更多相关《第6章Qt5图形与图画课件.ppt(47页珍藏版)》请在三一办公上搜索。
1、第6章 Qt 5图形与图画,6.1 Qt 5位置相关函数,6.2 Qt 5基础图形的绘制,6.3 Qt 5双缓冲机制,6.4 Qt 5 SVG格式图片的显示,6.1 Qt 5位置相关函数,6.1.1 区别概述Qt提供了很多关于获取窗体位置及显示区域大小的函数,如x( )、y( )和pos( )、rect( )、size( )、geometry( )等,统称为“位置相关函数”或“位置函数”,如图6.1所示是几种主要的位置函数,图中清楚地标出了它们之间的区别。,6.1.2 使用举例,具体实现步骤如下。(1)新建Qt Gui应用(详见本书第1章1.3.1节),项目名称为“Geometry ”,基类选
2、择“QDialog ”,类名命名为“Geometry”,取消“创建界面”复选框的选中状态。单击“下一步”按钮,最后单击“完成”按钮,完成该项目工程的建立。(2)Geometry类继承自QDialog类,在头文件中声明所需的控件(主要为QLabel类)及所需要的函数。打开“geometry.h”头文件,添加代码。,6.1.2 使用举例,(3)在构造函数中完成控件的创建以及初始化工作,打开“geometry.cpp”文件,添加代码。updateLabel()函数完成获得各位置函数的信息并显示功能,具体代码。重新定义QWidget的moveEvent()函数,响应对话框的移动事件,使得窗体在被移动时
3、能够同步更新各函数的显示结果,具体代码如下:void Geometry:moveEvent(QMoveEvent *) updateLabel();重新定义QWidget的resizeEvent()函数,响应对话框的大小调整事件,使得在窗体大小发生改变时,也能够同步更新各函数的显示结果,具体代码如下:void Geometry:resizeEvent(QResizeEvent *) updateLabel();,6.1.2 使用举例,(4)运行程序,效果如图6.2所示。,6.2 Qt 5基础图形的绘制,6.2.1 绘图框架设计绘制各种基础图形使用的框架实例如图6.3所示。具体内容见代码CH60
4、2。,6.2.1 绘图框架设计,此实例的具体实现包含了两个部分的内容,一个是用于画图的区域PaintArea类,另一个是主窗口MainWidget类,如图6.4所示。,6.2.2 绘图区的实现,打开“paintarea.h”头文件,添加代码。PaintArea类的构造函数用于完成初始化工作,设置图形显示区域的背景色及最小显示尺寸,具体代码如下:#include paintarea.h#include PaintArea:PaintArea(QWidget *parent):QWidget(parent) setPalette(QPalette(Qt:white); setAutoFillBac
5、kground(true); setMinimumSize(400,400);,6.2.2 绘图区的实现,setShape()函数可以设置形状,setPen()函数可以设置画笔,setBrush()函数可以设置画刷,setFillRule()函数可以设置填充模式,具体代码实现如下:void PaintArea:setShape(Shape s) shape = s; update();void PaintArea:setPen(QPen p) pen = p; update();void PaintArea:setBrush(QBrush b) brush = b; update();void
6、 PaintArea:setFillRule(Qt:FillRule rule) fillRule =rule; update(); /重画绘制区窗体PaintArea类的重画函数代码。,6.2.2 绘图区的实现,其中, QPainter p(this):新建一个QPainter对象。 p.setPen(pen)、p.setBrush(brush):设置QPainter对象的画笔和画刷。 QRect rect(50,100,300,200):设定一个方形区域,为画长方形、圆角方形、椭圆等做准备。 static const QPoint points4=:创建一个QPoint的数组,包含四个点,
7、为画多边形、多边线及点做准备。 int startAngle=30*16、int spanAngle =120*16:其中,参数startAngle表示起始角,为弧形的起始点与圆心之间连线与水平方向的夹角;参数spanAngle表示的是跨度角,为弧形起点、终点分别与圆心连线之间的夹角,如图6.5所示。,6.2.2 绘图区的实现, QPainterPath path:新建一个QPainterPath对象,为画路径做准备。 switch(shape):使用一个switch()语句,对所要画的形状做判断,调用QPainter的各个draw()函数完成图形的绘制。,6.2.2 绘图区的实现,(1)利用
8、QPainter绘制图形(Shape)。Qt为开发者提供了丰富的绘制基本图形的draw函数,如图6.6所示。,6.2.2 绘图区的实现,(2)利用QPainterPath绘制简单图形。利用QPainterPath绘制简单图形,QPainterPath类为QPainter类提供了一个存储容器,里面包含了所要绘制的内容的集合及绘制的顺序,如长方形、多边形、曲线等各种任意图形。cubicTo()函数绘制的是贝赛尔曲线,如图6.7所示。,6.2.2 绘图区的实现,利用QPainterPath类可以实现QPainter类的draw()函数能够实现的所有图形。例如,对于QPainter:drawRect(
9、)函数,除了可用上面介绍的QPainterPath:addRect()的方式实现,还可以用如下方式实现:QPainterPath path;path.moveTo(0,0);path.lineTo(200,0);path.lineTo(200,100);path.lineTo(0,100);path.lineTo(0,0);,6.2.3 主窗口的实现,打开“mainwidget.h”头文件,添加代码。MainWiget类的构造函数中创建了各参数选择控件,打开“mainwiget.cpp”文件,添加代码。,6.2.3 主窗口的实现,其中, shapeComboBox-addItem(tr(Lin
10、e),PaintArea:Line):QComboBox的addItem()函数可以仅插入文本,也可同时插入与文本相对应的具体数据,通常为枚举型数据,便于后面操作时确定选择的是哪个数据。 penStyleComboBox-addItem(tr(SolidLine),static_cast(Qt:SolidLine):选用不同的参数,对应画笔的不同风格,如图6.8所示。,6.2.3 主窗口的实现, penCapComboBox-addItem(tr(SquareCap),Qt:SquareCap):选用不同的参数,对应画笔顶帽的不同风格,如图6.9所示。,6.2.3 主窗口的实现, penJoi
11、nComboBox-addItem(tr(BevelJoin),Qt:BevelJoin):选用不同的参数,对应画笔连接点的不同风格,如图6.10所示。,6.2.3 主窗口的实现, fillRuleComboBox-addItem(tr(Odd Even),Qt:OddEvenFill):Qt为QPainterPath类提供了两种填充规则,分别是Qt:OddEvenFill和Qt:WindingFill,如图6.11所示。,6.2.3 主窗口的实现,其中,Qt:OddEvenFill填充规则判断的依据是从图形中某一点画一条水平线到图形外,若这条水平线与图形边线的交点数目为奇数,则说明此点位于图
12、形的内部;若交点数目为偶数,则此点位于图形的外部,如图6.12所示。,6.2.3 主窗口的实现,而Qt:WindingFill填充规则的判断依据则是从图形中某一点画一条水平线到图形外,每个交点外边线的方向可能向上,也可能向下,将这些交点数累加,方向相反的相互抵消,若最后结果不为0则说明此点在图形内,若最后结果为0则说明在图形外,如图6.13所示。,6.2.3 主窗口的实现, spreadComboBox-addItem(tr(PadSpread),QGradient:PadSpread):铺展效果有三种,分别为QGradient:PadSpread、QGradient:RepeatSpread
13、和QGradient:ReflectSpread。其中,PadSpread是默认的铺展效果,也是最常见的铺展效果,没有被渐变覆盖的区域填充单一的起始颜色或终止颜色;RepeatSpread效果与ReflectSpread效果只对线性渐变和圆形渐变起作用,如图6.14所示。,6.2.3 主窗口的实现, brushStyleComboBox-addItem(tr(SolidPattern),static_cast(Qt:SolidPattern):选用不同的参数,对应画刷的不同风格,如图6.15所示。,6.2.3 主窗口的实现,ShowShape()槽函数,根据当前下拉列表框中选择的选项,调用Pa
14、intArea类的setShape()函数设置PaintArea对象的形状参数,具体代码如下:void MainWidget:ShowShape(int value) PaintArea:Shape shape = PaintArea:Shape(shapeComboBox-itemData( value,Qt:UserRole).toInt(); paintArea-setShape(shape);,6.2.3 主窗口的实现,在此函数中获得与画笔相关的所有属性值,包括画笔颜色、画笔线宽、画笔风格、画笔顶帽及画笔连接点,共同构成QPen对象,并调用PaintArea对象的setPen()函数设
15、置PaintArea对象的画笔属性。其他与画笔参数相关的响应函数完成的工作与此类似,具体代码如下:void MainWidget:ShowPenColor() QColor color = QColorDialog:getColor(static_cast(Qt:blue); penColorFrame-setPalette(QPalette(color); int value = penWidthSpinBox-value(); Qt:PenStyle style = Qt:PenStyle(penStyleComboBox-itemData( penStyleComboBox-curren
16、tIndex(),Qt:UserRole).toInt(); Qt:PenCapStyle cap = Qt:PenCapStyle(penCapComboBox-itemData( penCapComboBox-currentIndex(),Qt:UserRole).toInt(); Qt:PenJoinStyle join=Qt:PenJoinStyle(penJoinComboBox-itemData( penJoinComboBox-currentIndex(),Qt:UserRole).toInt(); paintArea-setPen(QPen(color,value,style,
17、cap,join);,6.2.3 主窗口的实现,ShowPenWidth()槽函数的具体实现代码如下:void MainWidget:ShowPenWidth(int value) QColor color = penColorFrame-palette().color(QPalette:Window); Qt:PenStyle style = Qt:PenStyle(penStyleComboBox-itemData( penStyleComboBox-currentIndex(),Qt:UserRole).toInt(); Qt:PenCapStyle cap = Qt:PenCapSty
18、le(penCapComboBox-itemData( penCapComboBox-currentIndex(),Qt:UserRole).toInt(); Qt:PenJoinStyle join=Qt:PenJoinStyle(penJoinComboBox-itemData( penJoinComboBox-currentIndex(),Qt:UserRole).toInt(); paintArea-setPen(QPen(color,value,style,cap,join);,6.2.3 主窗口的实现,ShowPenStyle()槽函数的具体实现代码如下:void MainWidg



- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Qt5 图形 图画 课件

链接地址:https://www.31ppt.com/p-1824618.html