当前位置: 首页 > article >正文

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());

http://www.kler.cn/a/468711.html

相关文章:

  • (leetcode算法题)面试题 17.19. 消失的两个数字
  • GoF23种设计模式 简介
  • C# 设计模式(行为型模式):责任链模式
  • THREE.js的VideoTexture以及CanvasTexture在部分浏览器以及小程序webview中纯黑不起作用的解决办法
  • 常用的数据结构API概览
  • 【2025年最新】OpenWrt 更换国内源的指南(图形界面版)
  • 从零开始学TiDB(8) TiFlash 主要架构
  • 通过串口通信控制led灯的亮灭
  • 如何在centos中进行有效的网络管理
  • 基于ESP32的桌面小屏幕实战[5]:PCB下单
  • 深入Android架构(从线程到AIDL)_12 Android UI 单线程程序
  • AIGC生图实战技巧分享
  • iptable限制多个端口出站
  • C++直接内存管理new和delete
  • Kubernetes——part4-1 Kubernetes集群 服务暴露 Nginx Ingress Controller
  • frameworks 之 WallpaperManagerService 壁纸管理
  • spring mvc源码学习笔记之三
  • c语言的文件操作与文件缓冲区
  • 抖音生活服务2024年覆盖线下商家门店超610万,交易额同比提升81%
  • LeetCode 0732.我的日程安排表 III:线段树
  • [GCC]代码演示-Wl,-rpath-link链接时库搜索路径
  • 力扣hot100——动态规划 多维动态规划
  • 手动安装 Maven 依赖到本地仓库
  • Nginx:限流限速
  • 美食烹饪互动平台
  • 深入理解静态库与动态库