qt 混合 绘图_QT开发(十四)——QT绘图系统

本文详细介绍了QT的2D绘图系统,包括QT绘图原理,QT绘图框架中的基本元素如QPainter、QPainterDevice和QPainterEngine,以及使用QPen和QBrush进行绘图。通过重写重绘事件处理函数或事件过滤器实现绘图,并探讨了QPainter的各种绘图工具和技巧,如设置反锯齿、填充模式、渐变填充等。此外,还介绍了Qt支持的多种绘图设备,如QWidget、QImage、QPixmap等,以及QPainter类的主要绘图函数。
摘要由CSDN通过智能技术生成

QT开发(十四)——QT绘图系统

一、QT绘图原理

Qt4中的2D绘图系统称为Arthur绘图系统,可以使用相同的API在屏幕上和绘图设备上进行绘制,主要基于QPainter、QPainterDevice和 QPainterEngine。QPainter执行绘图操作,QPainterDevice提供绘图设备,是一个二维空间的抽象,QPainterEngine提供一些接口。QPainter用来执行具体的绘图相关操作,如画点,画线,填充,变换,alpha通道等。QPaintDevice类是能够进行绘图的对象的基类,QWidget,QPixmap,QPicture,QImage,以及QPrinter类继承了QPaintEngine类的绘图能力,QPainter类可以在一切继承QPainterDevice的子类上进行绘制操作。

QT中Arthur绘图框架中的基本绘图元素是画笔,画刷。QPainter类具有GUI程序需要的绝大多数函数,能够绘制基本图形(点,线,矩形,多边形等)以及复杂的图形(如绘图路径)。使用绘图路径(QPaintPath)的优点是复杂形状的图形只用生成一次,再使用的时候只需要调用QPainter::drawPath()就可以绘制。QPainterPath对象可以用来填充,绘制轮廓。线和轮廓都可以用画笔(QPen)进行绘制,画刷(QBrush)进行填充。画笔定义风格(线形),宽度,笔尖画刷以及端点是如何绘制的(cap-style),端点的连接方式(join-style)。画刷用来填充画笔绘制的图形,可以定制不同的填充模式和颜色的画刷。当绘制文字时,字体使用QFont类定义,Qt使用指定字体的属性,如果没有匹配的字体,Qt将使用最接近的字体。字体属性可以通过QFontInfo来获取。字体的度量(measurement)使用QFontMetrics类来获取。QFontDatabase类可以获得底层窗口系统所有可用的字体。

通常情况下QPainter以默认的坐标系统进行绘制,也可以用QMatrix类对坐标进行变换。当绘制时,可以使用QPainter::SetRenderHint函数设置绘图引擎是否启用反锯齿功能使图变得平滑。

QPainter::Antialiasing尽可能进行边的反锯齿绘制QPainter::TextAntialiasing尽可能进行文字的反锯齿绘制QPainter::SmoothPixmapTransform使用平滑的pixmap变换算法(双线性插值算法),而不是近邻插值算法

1、重写重绘事件处理函数实现绘图

重绘事件处理函数:

void QWidget::paintEvent ( QPaintEvent * event )

基础部件类Qwidget提供的paintEvent函数,是纯虚函数;Qwidget的子类要使用paintEvent函数必须重新实现。在三种情况会发生重绘事件调用paintEvent函数:

A、当窗口部件第一次显示时,系统会自动产生一个绘图事件

B、repaint()与update()函数被调用时

C、当窗口部件被其他部件遮挡,然后又再次显示出来时,就会对隐藏的区域产生一个重绘事件

D、重新调整窗口大小时

2、通过事件过滤器实现重绘

二、绘图工具

绘图时需要先定义一个QPainter类对象,绘图工具可以使Qpen(画笔)和QBrush(画刷)。Qpen(画笔)来绘制轮廓线,QBrush(画刷)用来填充,使用QPen写文本时还可以指定字体(QFont类)。

1、QPen画笔

画笔的属性包括线型,线宽,颜色等。

A、QPen主要成员函数如下:

QPen(Qt::PenStyle style)

QPen(const QColor & color)

QPen(const QBrush & brush, qreal width, Qt::PenStyle style = Qt::SolidLine,     Qt::PenCapStyle cap = Qt::SquareCap, Qt::PenJoinStyle join = Qt::BevelJoin)

QPen(const QPen & pen)

voidsetBrush(const QBrush & brush)

voidsetCapStyle (Qt::PenCapStyle style)

voidsetColor (const QColor & color)

voidsetJoinStyle (Qt::PenJoinStyle style)

voidsetWidth (int width)

画笔的属性可以在构造函数中指定,也可以使用setStyle(),setWidth(),setBrush(),setCapStyle(),setJoinStyle()等函数设定画笔的各项属性。Qt中使用Qt::PenStyle定

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值