QPainter

目录

/*绘制图形*/ draw

/*图形渲染提示*/ setRenderHint

 /*渐变渲染*/ Gradient


paintEvent是QT的基类函数,用于响应窗口系统发出的重绘请求,每当一个窗口部件需要更新其显示内容时,例如窗口首次显示、部分窗口从被遮挡变为可见、或者你显式地调用了update()或repaint()函数,Qt会自动调用这个方法。

前置用法:

protected:
    void paintEvent(QPaintEvent* event) override;

基本方法:

void MainWindow::paintEvent( QPaintEvent* event)
    QPainter painter(this);//绑定部件
    painter.setPen(Qt::red); // 设置画笔颜色为红色,即图形的边框颜色
    painter.setBrush(Qt::yellow); // 设置画刷颜色为黄色,即图形内部颜色

/*绘制图形*/ draw

//绘制一个矩形 (x,y,宽度,高度)
painter.drawRect(10, 10, 100, 100);

//绘制一个椭圆(x,y,内切于100,100的矩形)
painter.drawEllipse(10, 10, 100, 100);

//绘制一条直线
painter.drawLine(int x1, int y1, int x2,int y2);

//绘制一个扇形
painter.drawPie(QRect(x1, y1, width, heigth),angle1 * 16, angle2 * 16);//内切矩形,angle1开始角度,angle2跨越角度,开始角度以1/16度为单位

//绘制一个点
painter.drawPoint(int x, int y)

//绘制一个多边形,使用给定点集绘制一个多边形,并根据指定的填充规则来决定如何填充内部区域。
painter.drawPolygon(const QPolygon &polygon, Qt::FillRule)
示例:
QPolygon polygon;
polygon << QPoint(100, 100)
    << QPoint(150, 50)
    << QPoint(200, 100)
    << QPoint(175, 150)
    << QPoint(125, 150);//或者用append(),这是一个五边形
默认使用 OddEvenFill 规则,或者指定使用 WindingFill 规则
painter.drawPolygon(polygon); //painter.drawPolygon(polygon, Qt::WindingFill);


//绘制一条折线
painter.drawPolyline(const QPolygon &polyline)

//绘制文本
painter.drawText(int x, int y, const QString &text)

/*图形渲染提示*/ setRenderHint

//设置渲染提示,告诉绘图系统如何处理某些类型的图形操作
painter.setRenderHint(QPainter::RenderHint hint, bool on = true)

1、
//启用抗锯齿
painter.setRenderHint(QPainter::Antialiasing)

//文本抗锯齿
painter.setRenderHint(QPainter::TextAntialiasing)

高品质抗锯齿
painter.setRenderHint(QPainter::HighQuantityAntialiasing)

2、
//旋转、缩放平滑,注重质量
painter.setRenderHint(QPainter::SmoothPixmapTransform)

//注重转化速度
painter.setRenderHint(Qt::FastTransformation)

3、针对画笔线条宽度,根据图形缩放程度自动调整
painter.setRenderHint(QPainter::NonCosmeticDefaultPen)

4、//避免渲染过程中失真
painter.setRenderHint(Qt::LosslessImageRendering)

5、//提高绘制效率,前提是内容非透明
painter.setRenderHint(Qt::OpaquePaintEvent)

也可以用painter.setRenderHints(QPainter::A |QPainter::B....)来组合多个提示

 /*渐变渲染*/ Gradient

1、线性 QLinearGradient(起点到终点渐变)

//线性渐变
QLinearGradient linearGradient(x1, y1, x2, y2); // 渐变生效域 起点(x1, y1) 终点(x2, y2)

// 设置颜色停靠点
linearGradient.setColorAt(0.0, Qt::red); // 起点颜色
linearGradient.setColorAt(0.5, Qt::green); //中点颜色
linearGradient.setColorAt(1.0, Qt::blue); // 终点颜色

//创建渐变画刷
QBrush brush(linearGradient);

//绘图
QPainter painter(this);
painter.setBrush(brush);
painter.setPen(Qt::NoPen); // 无边框
painter.drawRect(this->rect()); // 绘制矩形覆盖整个小部件
2、径向 QRadialGradient (焦点向外渐变)

//径向渐变
QRadialGradient radialGradient(x, y, radial);//渐变生效域 中心坐标,半径
radialGradient.setFocalPoint(80, 80);//焦点,即渐变的中点,但不影响原始图象域的方位
radialGradient.setColorAt(0, Qt::black);
radialGradient.setColorAt(1, Qt::red);

QBrush brushRadial(radialGradient);

QPainter painter(this);
painter.setBrush(brushRadial);
painter.setPen(Qt::NoPen);
painter.drawRect(this->rect());

3、圆锥形 QConicalGradient(根据角度旋转渐变)

//圆锥形渐变
QConicalGradient conicalGradient(x,y,angle);//中心点,开始角度(0-360°,顺时针)
conicalGradient.setColorAt(0.0, Qt::red);
conicalGradient.setColorAt(0.5, Qt::blue);
conicalGradient.setColorAt(1.0, Qt::yellow);

QBrush brushConical(conicalGradient);

QPainter painter(this);
painter.setBrush(brushConical);
painter.setPen(Qt::NoPen);
painter.drawRect(this->rect());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值