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

Qt QPaintEvent绘图事件painter使用指南

绘制需在paintEvent函数中实现

用图片形象理解

如果加了刷子再用笔就相当于用笔画过的区域用刷子走

防雷达:

源文件

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QPainter>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);timer = new QTimer(this);connect(timer,&QTimer::timeout,this,[=]{update();});timer->start(10);
}Widget::~Widget()
{delete ui;
}
void Widget::paintEvent(QPaintEvent *event)
{static int i = 0;qDebug() << "painterEvent" << i++;QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing,true);//抗锯齿QBrush brush(Qt::black);painter.setBrush(brush);painter.drawRect(rect());painter.setBrush(Qt::NoBrush);//画刷只用一次否则会覆盖QPen pen(Qt::green,3);painter.setPen(pen);painter.translate(rect().center());//原点移到矩形正中央painter.drawEllipse(QPoint(0,0),7*height()/14,7*height()/14);painter.drawEllipse(QPoint(0,0),6*height()/14,6*height()/14);painter.drawEllipse(QPoint(0,0),5*height()/14,5*height()/14);painter.drawEllipse(QPoint(0,0),4*height()/14,4*height()/14);painter.drawEllipse(QPoint(0,0),3*height()/14,3*height()/14);painter.drawEllipse(QPoint(0,0),2*height()/14,2*height()/14);painter.drawEllipse(QPoint(0,0),1*height()/14,1*height()/14);painter.drawLine(-height()/2,0,height()/2,0);painter.drawLine(0,-height()/2,0,height()/2);QConicalGradient conicalGradient(0,0,30-i);conicalGradient.setColorAt(0,QColor(0,255,0,200));conicalGradient.setColorAt(0.1,QColor(0,255,0,100));conicalGradient.setColorAt(0.2,QColor(0,255,0,0));conicalGradient.setColorAt(1,QColor(0,255,0,0));//画笔加刷划过去painter.setBrush(conicalGradient);painter.setPen(Qt::NoPen);painter.drawPie(QRect(-height()/2,-height()/2,height(),height()),(30-i)*16,70*16);if (i==360) i=0;
}

头文件

#ifndef WIDGET_H
#define WIDGET_H#include <QTimer>
#include <QWidget>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();
protected:void paintEvent(QPaintEvent *event) override;
private:Ui::Widget *ui;QTimer *timer;};
#endif // WIDGET_H

http://www.lryc.cn/news/2387401.html

相关文章:

  • 伪创新-《软件方法》全流程引领AI-第1章 04
  • win11如何重启
  • 【iOS】 锁
  • uni-app学习笔记十五-vue3页面生命周期(一)
  • Flink核心概念小结
  • 《软件工程》第 14 章 - 持续集成
  • 大模型 Agent 中的通用 MCP 机制详解
  • Navicat 17 SQL 预览时表名异常右键表名,点击设计表->SQL预览->另存为的SQL预览时,表名都是 Untitled。
  • Orpheus-TTS:AI文本转语音,免费好用的TTS系统
  • Python爬虫实战:研究Goose框架相关技术
  • webpack优化方法
  • STM32 Keil工程搭建 (手动搭建)流程 2025年5月27日07:42:09
  • MyBatis 框架使用与 Spring 集成时的使用
  • OpenGL Chan视频学习-7 Writing a Shader inOpenGL
  • 顶会新方向:卡尔曼滤波+目标检测
  • 数据库相关问题
  • 一起学数据结构和算法(二)| 数组(线性结构)
  • Linux基本指令篇 —— touch指令
  • 【后端高阶面经:消息队列篇】23、Kafka延迟消息:实现高并发场景下的延迟任务处理
  • Mac安装MongoDB数据库以及MongoDB Compass可视化连接工具
  • 城市地下“隐形卫士”:激光甲烷传感器如何保障燃气安全?
  • MySQL推出全新Hypergraph优化器,正式进军OLAP领域!
  • 飞牛fnNAS手机相册备份及AI搜图
  • 消费类,小家电产品如何做Type-C PD快充快速充电
  • 连接表、视图和存储过程
  • 人工智能赋能教育:重塑学习生态,开启智慧未来
  • 银河麒麟V10×R²AIN SUITE:用AI重构安全,以国产化生态定义智能未来
  • JavaScript- 3.2 JavaScript实现不同显示器尺寸的响应式主题和页面
  • 15.进程间通信(一)
  • AI 数据采集实战指南:基于 Bright Data 快速获取招标讯息