Qt QPainter

本文介绍了Qt中的QPainter类在QPaintEvent中进行图形绘制的基本操作,包括设置画笔QPen、启用抗锯齿、移动坐标原点、旋转图形以及填充颜色等。还提到了如何在屏幕中心绘制图形和实现图形的自转效果。此外,文章还展示了如何使用QPainterPath和QPaintDevice进行更复杂的绘图。
摘要由CSDN通过智能技术生成

QPainter需要在QPaintEvent中绘画

绘画需要笔

绘画需要的基础头文件

QPainter

QPaintEvent

QPen

QPainter

建立painter之后就可以绘画,pen这些都有默认实现

画家必须要激活才能绘画

画家必须传递this指针才能激活。 

 

可画设备

圆用椭圆画

重新绘画

重新绘画只需要重新加入画笔就可以

painter.setPen(pen); // 重新设置画笔

painter高级设置

抗锯齿能力---setRenderHint

画出来的远见更加光滑,但是影响程序效率

    painter.drawEllipse(QPoint(100,100),50,50);
    painter.setRenderHint(QPainter::HighQualityAntialiasing);
    painter.drawEllipse(QPoint(200,200),50,50);

 移动画家位置---translate()----(实际上移动坐标原点)

    painter.drawRect(QRect(200,200,200,200));
    painter.translate(50,50);
    painter.drawRect(QRect(200,200,200,200));

 保存和释放画家状态

 更新绘图事件

update()

update会自动调用paintEvent()函数,从小绘图。

rotate---顺时针旋转坐标系

注意:

1,坐标围绕原点旋转,需要使用translate将原点移动到旋转中心。

2,rotate只对调用rotate之后绘制的图形有旋转作用。

物体绕着中心原点自转

   

    painter.translate(width()/2,height()/2);
    painter.rotate(m_angle);

    // 绘制正方形
    QRectF rect(0, 0, 100, 100);
    painter.drawRect(rect);

物体自转

//设置旋转中心
    painter.translate(width()/2,height()/2);
    painter.rotate(m_angle);
    painter.drawEllipse(QPoint(0,0),50,25);

将图形的旋转中心设置到原点,图形就会绕着原点旋转,如果图形的旋转中心是自己的中心,就会自转。

paintEvent

系统自动调用。

Brush

brush是什么

就是对painter绘制出来的封闭图形进行颜色填充,粉刷。

    QBrush brush(QColor("#ffa400"));
    //brush.setColor(QColor("#ffa400"));
    painter.setBrush(brush);
    painter.drawRect(20,20,100,100);

注意:如果brush的brushStyle为No Brush,则表示这个brush为不粉刷模式,粉刷没有作用。

如果使用无参构造函数,表示建立黑色粉刷笔,并且不会粉刷,不会填充形状。

painter取消粉刷

painter.setBrush(Qt::NoBrush);

 怎么获取屏幕中心位置:

painter.drawEllipse(QPoint((this->width())/2,(this->height())/2),100,100);

QPainterPath

函数

QPainter::QPainter(QPaintDevice *device)

device指定在哪个对象绘画

Qt颜色

Qt::中也有

绘图设备

绘图的几种类的比较

为什么可以在QWidget上绘图

在屏幕中心画一个十字架

void MainWindow::paintEvent(QPaintEvent *e)
{
    QPainter painter(this);
    painter.setPen(Qt::green);

    painter.drawLine(rect().center()+QPoint{0,5},rect().center()+QPoint{0,20});
    painter.drawLine(rect().center()+QPoint{5,0},rect().center()+QPoint{20,0});
    painter.drawLine(rect().center()+QPoint{0,-5},rect().center()+QPoint{0,-20});
    painter.drawLine(rect().center()+QPoint{-5,0},rect().center()+QPoint{-20,0});
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值