Chinaunix首页 | 论坛 | 博客
  • 博客访问: 129643
  • 博文数量: 46
  • 博客积分: 571
  • 博客等级: 准尉
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-26 23:57
文章分类

全部博文(46)

文章存档

2012年(46)

我的朋友

分类: C/C++

2012-05-19 13:07:20

学习之路(25):Qpainter(续)

作者:豆子

转自http://devbean.blog.51cto.com/448512/235851

版权声明:原创作品,允许转载,转载时请务必以超链接形式表明文章原始出处、作者信息和本声明。否则将追究法律责任

 

过去一天没有接上上章的东西,今天继续啊!                                       

首先还是要先把上次的代码拿上来。

clip_image001void PaintedWidget::paintEvent(QPaintEvent *event) 
clip_image001
clip_image001        QPainter painter(this); 
clip_image001        painter.drawLine(80, 100, 650, 500); 
clip_image001        painter.setPen(Qt::red); 
clip_image001        painter.drawRect(10, 10, 100, 400); 
clip_image001        painter.setPen(QPen(Qt::green, 5)); 
clip_image001        painter.setBrush(Qt::blue); 
clip_image001        painter.drawEllipse(50, 150, 400, 200); 
clip_image001}

 

上次我们说的是Qt绘图相关的架构,以及QPainter的建立和drawXXXX函数。可以看到,基本上代码中已经设计到得函数还剩下两个:setPen()setBrush()。现在,我们就要把这两个函数讲解一下。

Qt
绘图系统提供了三个主要的参数设置,画笔(pen)、画刷(brush)和字体(font)。这里我们要说明的是画笔和画刷。

画笔支持三种主要的样式:笔帽(cap),结合点(join)和线形 (line)。这些样式具体显示如下(图片来自C++ GUI Programming with Qt4, 2nd Edition)

 

clip_image003

 

上图共分成三行:第一行是Cap样式,第二行是Join样式,第三行是Line样式。QPen允许你使用setCapStyle()setJoinStyle()setStyle()分别进行设置。具体请参加API文档。

 

所谓画刷,主要用来填充封闭的几何图形。画刷主要有两个参数可供设置:颜色和样式。当然,你也可以使用纹理或者渐变色来填充图形。请看下面的图片(图片出自Qt API 文档)

 

clip_image005

这里给出了不同style的画刷的表现。同画笔类似,这些样式也可用通过一个enum进行设置。

 

明白了这些之后我们再来看看我们的代码。首先,我们直接使用drawLine()函数,由于没有设置任何样式,所以使用的是默认的1px,,黑色,solid样式画了一条直线;然后使用setPen()函数,将画笔设置成Qt::red,即红色,画了一个矩形;最后将画笔设置成绿色,5px,画刷设置成蓝色,画了一个椭圆。这样便显示出了我们最终的样式:

clip_image007

 

另外要说明一点,请注意我们的绘制顺序,首先是直线,然后是矩形,最后是椭圆。这样,因为椭圆是最后画的,因此在最上方。

 

在我们学习OpenGL的时候,肯定听过这么一句话:OpenGL是一个状态机。所谓状态机,就是说,OpenGL保存的只是各种状态。怎么理解呢?比如,你把颜色设置成红色,那么,直到你重新设置另外的颜色,它的颜色会一直是红色。QPainter也是这样,它的状态不会自己恢复,除非你使用了各种set函数。因此,如果在上面的代码中,我们在椭圆绘制之后再画一个椭圆,它的样式还会是绿色5px的轮廓和蓝色的填充,除非你显式地调用了set进行更新。这可能是绘图系统较多的实现方式,因为无论是OpenGLQPainter还是Java2D,都是这样实现的(DirectX不大清楚)

 

本文出自 “豆子空间” 博客,请务必保留此出处http://devbean.blog.51cto.com/448512/235851

 

阅读(1173) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~