Qt学习笔记(七) 二维图形(1) 使用QPainter绘图

 

Qt的二位图形引擎是基于 QPainter 类的。它既可以绘制几何形状,也可以绘制像素映射、图像和文字。自定义窗口部件需要重新实现 QWidget::paintEvent()

 

void Widget:: paintEvent( QPaintEvent * /*paintEvent*/ )

{

draw();

drawBezier();

}

 

void Widget:: draw()

{

    QPainter painter( this );

    painter. setPen( QPen ( Qt :: black, 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…() 可以绘制不同的图形。画笔、画刷、字体是最重要的三种设置。

画笔用来画线和边缘, QPainter ::setPen() 可以对画笔进行设置,包括颜色、宽度、线型、拐点风格等。

画刷用来填充几何形状的图案, QPainter ::setBrush() 可以对画刷进行设置,包括颜色和纹理风格。

绘制文本时需要对字体进行设置, QPainter ::setFont() 对字体进行设置,包括字体族和磅值。

 

 

void Widget:: drawBezier()

{

    QPainter painter( this );

painter. setRenderHint( QPainter :: Antialiasing, true );

 

    QPainterPath path;

    path. moveTo( 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 , 80 , 480 , 320 );

 

    painter. setPen( QPen ( Qt :: black, 2 ));

painter. drawPath( path);

 

    painter. setPen( QPen ( Qt :: red, 4 ));

    painter. drawPoint( 10 , 320 );

     painter. drawPoint( 200 , 80 );

    painter. drawPoint( 400 , 80 );

    painter. drawPoint( 480 , 320 );

}

 


 

可看到几个点和曲线的位置关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值