qt 混合 绘图_QT绘图基础(一)

本文介绍了Qt的2D绘图基础,包括QPainter、QPainterDevice和QPainterEngine的核心概念,以及QPen和QBrush的详细用法。讲解了如何使用线性、圆形和圆锥渐变填充,以及双缓冲绘图和Alpha通道的应用。此外,还探讨了坐标系统、坐标变换以及组合模式绘图,如Porter-Duff规则和额外的混合模式。
摘要由CSDN通过智能技术生成

2D绘图

Qt4中的2D绘图部分称为Arthur绘图系统.它由3个类支撑整个框架,QPainter,QPainterDevice和QPainterEngine.QPainter用来执行具体的绘图相关操作

如画点,画线,填充,变换,alpha通道等。QPainterDevice是QPainter用来绘图的绘图设备,Qt中有几种预定义的绘图设备,如QWidget,QPixamp,QPrinter

等.他们都从QPaintDevice继承。QPaintEngine类提供了不同类型设备的接口,QPaintEngine对程序员不透明,由QPainter,QPaintDevice类与其进行交互。

从Qt4.2开始,Graphics View框架取代了QCanvas,QGraphics View框架使用了MVC模式,适合对大量2D图元的管理,Grphics View框架中,场景(scene)

存储了图形数据,它通过视图(view)以多种表现形式,每个图元(item)可以单独进行控制.

Arthur绘图基础

在Arthur绘图框架中的基本绘图元素是画笔,画刷。

QPainter类具有GUI程序需要的绝大多数函数,能够绘制基本图形(点,线,矩形,多边形等)以及复杂的图形(如绘图路径).使用绘图路径(QPaintPath)的优点是复杂形状

的图形之用生成一次,以后再使用的时候是需要调用QPainter::drawPath()就可以了。QPainterPath对象可以用来填充,绘制轮廓。

线和轮廓都可以用画笔(QPen)进行绘制,画刷(QBrush)进行填充。画笔定义了风格(线形),宽度,笔尖画刷以及端点是如何绘制的(cap-style),端点的连接方式(join-style)

.画刷用来填充画笔绘制的图形,可以定制不同的填充模式和颜色的画刷。

当绘制文字时,字体使用QFont类定义,Qt使用指定字体的属性,如果没有匹配的字体,Qt将使用最接近的字体。字体属性可以通过QFontInfo来获取。字体的度量(measurement)

使用QFontMetrics类来获取。QFontDatabase类可以获得底层窗口系统所有可用的字体.

通常情况下QPainter以默认的坐标系统进行绘制,也可以用QMatrix类对坐标进行变换。

当绘制时,可以使用QPainter::RenderHint来告诉绘图引擎是否启用饭锯齿功能使图变得平滑。

QPainter::RenderHint的可取如表6-1中的值

------------------------------------------------------------------------------------------------

QPainter::Antialiasing           告诉绘图引擎应该在可能的情况下进行边的反锯齿绘制

QPainter::TextAntialiasing       尽可能的情况下文字的反锯齿绘制

QPainter::SmoothPixmapTransform  使用平滑的pixmap变换算法(双线性插值算法),而不是近邻插值算法

-------------------------------------------------------------------------------------------------

QPainter的绘图函数

-------------------------------------------------------------------------------------------------

drawArc()                                 弧

drawChord()                               弦

drawConvexPolygon()                       凸多边形

drawEllipse()                             椭圆

drawImage()                               QImage表示的图像

drawLine()                                线

drawLines()                               多条线

drawPath()                                路径

drawPicture()                             按QPainter指令绘制

drawPie()                                 扇形

drawPixmap()                              QPixmap表示的图像

drawPoint()                               点

drawPoints()                              多个点

drawPolygon()                             多边形

drawPolyline()                            多折线

drawRect()                                矩形

drawRects()                               多个矩形

drawRoundRect()                           圆角矩形

drawText()                                文字

drawTiledPixmap()                         平铺图像

drawLineSegments()                        绘制折线

------------------------------------------------------------------------------------------------

drawPicture()函数负责绘制QPicture中存储的QPainter指令,QPicture是可以记录QPainter绘图指令的类.它将QPainter的绘图指令串行化为平台无关的存储格式。

下面的代码将记录的绘图指令重绘。

QPicture picture;

picture.load("mypicture.pic");

QPainter painter(this);

painter.drawPicture(0,0,picture);//在(0,0)处重放绘图指令,也可以使用QPicture::play()完成相同的功能

===================================================================================

使用画笔

画笔的属性包括线型,线宽,颜色等。画笔的属性可以在构造函数中指定,也可以使用setStyle(),setWidth(),setBrush(),setCapStyle(),setJoinStyle()等函数

逐项设定画笔的各项属性.Qt中使用Qt::PenStyle定义了6种画笔风格,分别是Qt::SolidLine,Qt::DashLine,Qt::DotLine,Qt::DashDotLine,Qt::DashDotDotLine,

Qt::CustomDashLine.自定义线风格(Qt::CustomDashLine),需要使用QPen的setDashPattern()函数来设定自定义风格.

下面代码设置了一个自定义QPen

QPen pen;

QVector customDashes;

qreal blank=4;

dashes<<2< pen.setDashPattern(customDashes);

端点风格(cap style)

端点风格决定了线的端点样式,它只对线宽大于1的线有效。Qt种定义了三种端点风格用枚举类型Qt::PenCapStyle表示,分别为Qt::SqureCap,QT::FlatCap,Qt::RoundCap,

连接风格(Join style)

连接风格是两条线如何连接,连接风格对线宽大于等于1的线有效。Qt定义了四种连接方式用枚举类型Qt::PenStyle表示.分别是Qt::MiterJoin,Qt::BevelJoin,Qt::RoundJoin.

Qt::SvgMiterJoin.

2.画刷

在Qt中图形使用QBrush进行填充,画刷包括填充颜色和风格(填充模式).在Qt中,颜色使用QColor类表示,QColor支持RGB,HSV,CMYK颜色模型。QColor还支持alpha混合的轮廓和

填充。基本模式填充包括有各种点,线组合的模式。Qt支持RGB,HSV,和CMYK颜色模型。RGB是面向硬件的模型。颜色由红绿蓝三种

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值