QT 绘图函数.doc

上传人:灯火****19 文档编号:135113941 上传时间:2020-06-12 格式:DOC 页数:17 大小:207.34KB
返回 下载 相关 举报
QT 绘图函数.doc_第1页
第1页 / 共17页
QT 绘图函数.doc_第2页
第2页 / 共17页
QT 绘图函数.doc_第3页
第3页 / 共17页
QT 绘图函数.doc_第4页
第4页 / 共17页
QT 绘图函数.doc_第5页
第5页 / 共17页
点击查看更多>>
资源描述

《QT 绘图函数.doc》由会员分享,可在线阅读,更多相关《QT 绘图函数.doc(17页珍藏版)》请在金锄头文库上搜索。

1、8-1 用QPainter绘图(Painting with QPainter)2011-10-26 19:56:04|分类: 默认分类 |标签: |字号大中小订阅 8-1 用QPainter绘图(Painting with QPainter) 分类: C+ GUI Programming with Qt 4 2007-05-29 21:52 8228人阅读 评论(3) 收藏 举报 要在绘图设备(paint device,一般是一个控件)上开始绘制,我们只要创建一个QPainter,把绘图设备指针传给QPainter对象。例如:oid MyWidget:paintEvent(QPaintEven

2、t *event) QPainter painter(this); .使用QPainter的draw()函数我们可以绘制各种图形。图8.1给出了主要的一些。绘制的方式由QPainter的设置决定。设置的一部分是从绘图设备得到的,其他是初始化时的默认值。三个主要的设置为:画笔,刷子和字体。画笔用来绘制直线和图形的边框。包含颜色,宽度,线型,角设置和连接设置。刷子是填充几何图形的方式。包含颜色,方式设置,也可以是一个位图或者渐变色。字体用来绘制文本。字体的属性很多,如字体名,字号等。 这些设置随时可以改变,可用QPen,QBrush,QFont对象调用setPen(),setBrush(),set

3、Font()修改。 Figure 8.1. QPainters most frequently used draw.() functionsFigure 8.2. Cap and join stylesFigure 8.3. Pen stylesFigure 8.4. Predefined brush styles 现在来看看具体的例子。下面的代码是绘制图8.5(a)中椭圆的代码:QPainter painter(this);painter.setRenderHint(QPainter:Antialiasing, true);painter.setPen(QPen(Qt:black, 12,

4、Qt:DashDotLine, Qt:RoundCap);painter.setBrush(QBrush(Qt:green, Qt:SolidPattern);painter.drawEllipse(80, 80, 400, 240);调用函数setRenderHint(QPainter:Antialiasing,true),使绘制时边缘平滑,使用颜色浓度的变化,把图形的边缘转换为象素时引起的扭曲变形尽可能减少,在支持这一功能的平台或者绘图设备上得到一个平滑的边缘。Figure 8.5. Geometric shape examples 下面的代码是图8.5(b)中绘制扇形的代码:QPaint

5、er painter(this);painter.setRenderHint(QPainter:Antialiasing, true);painter.setPen(QPen(Qt:black, 15, Qt:SolidLine, Qt:RoundCap, Qt:MiterJoin);painter.setBrush(QBrush(Qt:blue, Qt:DiagCrossPattern);painter.drawPie(80, 80, 400, 240, 60 * 16, 270 * 16);函数drawPie()的最后两个参数值的单位为一度的十六分之一。下面的代码是图8.5(c)中绘制贝赛

6、尔曲线的代码:QPainter painter(this);painter.setRenderHint(QPainter:Antialiasing, true);QPainterPath path;path.moveTo(80, 320);path.cubicTo(200, 80, 320, 80, 480, 320);painter.setPen(QPen(Qt:black, 8);painter.drawPath(path);通过连接基本图形元素,直线,椭圆,多段线,圆弧,二次和三次贝塞尔曲线等,QPainterPath类能确定任何矢量图形。因此,绘图路径(Painter paths)是最

7、基本的绘制元素,任何图形和图形的组合都可以同路径(path)表示。一个路径能够确定一个轮廓,由这个轮廓确定的区域可以由刷子来填充。在图8.5(c)中我们没有设置刷子,因此只绘制了轮廓。以上的三个例子都是使用了默认的刷子(Qt:SolidePattern,Qt:DiagCrossPattern,Qt:NoBrush)。在现在的应用程序中,单色填充已经很少使用,渐变色填充开始收到欢迎。渐变是依靠颜色的变化实现两种或者多种颜色之间平滑的过渡。渐变通常用来处理3D效果,如使用Plastique渐变方式来表现QPushButtons。Qt支持三种类型的渐变:线形渐变,圆锥渐变和圆形渐变(linear,

8、conical, and radial)。下一节的OvenTimer例子就是在一个控件中使用了所有这三种渐变。线形渐变由两个控制点和直线上的一系列颜色点组成。图8.6由下面的代码得到:在两个控制点之间,在三个不同的位置确定了三个不同的颜色值。位置有0到1的浮点数得到,0为第一个控制点,1为第二个控制点。不同位置点之间的颜色由差值计算得到。LinearGradient gradient(50, 100, 300, 350);gradient.setColorAt(0.0, Qt:white);gradient.setColorAt(0.2, Qt:green);gradient.setColor

9、At(1.0, Qt:black);Figure 8.6. QPainters gradient brushes 圆形渐变由颜色组,圆心(xc,yc),半径r和焦点(xf,yf)定义。圆心和半径定义一个圆,颜色从焦点开始扩散到周围,焦点可以是圆心也可以是圆内的任意一个点。圆锥渐变由圆心(xc,yc)和一个角度a定义。颜色从圆心开始像表的秒针一样扩散。我们已经提到了QPainter的画笔,刷子和字体设置。此外,QPainter还有其他一些设置影响图形和文字的绘制:1. 背景刷子,当背景模式为Qt:OpaqueMode(缺省值为Qt:transparentMode)时,背景刷子用来填充几何图形,文

10、字,和位图的背景(在绘图刷子的下面)2. 刷子的起点:刷子的起始绘制点,通常为控件的左上角。3. 剪辑区域,剪辑区域为绘图设备上可以绘制的区域,在剪辑区域意外进行的绘制是无效的。4. 视口,窗口,世界坐标:这三个决定了QPainter的逻辑坐标映射到物理坐标的方式。通常,逻辑坐标和物理坐标是重合的。坐标系统在下一节介绍。5. 组合方式:组合方式决定绘制设备上新绘制的象素和已经存在的象素的影响方式。缺省方式为覆盖式(source over),新象素画在已有元素的上面。只是有限一个绘图设备支持组合方式的设置,将在本章后面介绍在任何时候,我们可以调用save()把QPainter当前的设置保存在一个

11、内部栈里,然后调用restore()进行恢复。我们能够临时改变QPainter的一些设置,然后恢复先前的值Qt的二位图形引擎是基于 QPainter 类的。它既可以绘制几何形状,也可以绘制像素映射、图像和文字。自定义窗口部件需要重新实现 QWidget:paintEvent() 。 void Widget: paintEvent( QPaintEvent * /*paintEvent*/ ) draw(); drawBezier(); void Widget: draw() QPainter painter( this ); painter. setPen( QPen ( Qt : black

12、, 10 , Qt : DashDotLine, Qt : RoundCap); painter. setBrush( QBrush ( Qt : green, Qt : SolidPattern); painter. drawEllipse( 10 , 10 , 400 , 240 ); painter. drawRect( QRect ( 10 , 300 , 400 , 140 ); 首先需要创建一个 QPainter ,将需要绘图的设备的指针传递给 QPainter 。 QPainter 有各种 draw() 可以绘制不同的图形。画笔、画刷、字体是最重要的三种设置。 画笔用来画线和边缘

13、, QPainter :setPen() 可以对画笔进行设置,包括颜色、宽度、线型、拐点风格等。 画刷用来填充几何形状的图案, QPainter :setBrush() 可以对画刷进行设置,包括颜色和纹理风格。 绘制文本时需要对字体进行设置, QPainter :setFont() 对字体进行设置,包括字体族和磅值。 void Widget: drawBezier() QPainter painter( this ); painter. setRenderHint( QPainter : Antialiasing, true ); QPainterPath path; path. moveTo

14、( 10 , 320 ); path. cubicTo( 200 , 80 , 400 , 80 , 480 , 320 ); painter. setPen( QPen ( Qt : black, 8 ); painter. setBrush( QBrush ( Qt : green, Qt : DiagCrossPattern); painter. drawPath( path); QPainterPath 可以通过连接基本的图形单元元素来确定任意的矢量形状,包括:直线、椭圆、多边形、弧形、贝赛尔曲线等。 首先使用 QPainter :moveto() 来确定图形的起点,然后通过 cubicTo() 来确定绘制的线路。前 4 个参数确定了两个控制点,后两个参数是结束点的位置。 修改函数如下: void Widget: drawBezier() QPainter painter( this ); painter. setRenderHint( QPainter : Antialiasing, true ); QPainterPath path; path. moveTo( 10 , 320 ); path. cubicTo( 200 , 80 , 400 , 8

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 初中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号