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

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.dtcms.com/a/216357.html

相关文章:

  • lcd-framebuffer驱动开发参考文章
  • 外卖霸王餐支持京东外卖点餐啦~
  • 零基础远程连接课题组Linux服务器,安装anaconda,配置python环境(换源),在服务器上运行python代码【1/3 适合小白,步骤详细!!!】
  • 高防CDN如何解决网站访问卡顿与崩溃问题?
  • 如何提高CAD作图设计效率,技术分享
  • Memory Repair (一)
  • 【报错解决方案】cannot open shared object file: No such file or directory
  • Unity3D仿星露谷物语开发54之退出菜单及创建可执行文件
  • 非标RFID电子标签工业载码体如何定制?
  • win11如何重启
  • OpenCV---findCountours
  • 11.13 LangGraph记忆机制解析:构建生产级AI Agent的关键技术
  • Linux的五种IO模型
  • 《软件工程》实战— 在线教育平台开发
  • 2.1 Maven项目架构管理工具
  • Pathway:重新定义实时数据处理的Python框架
  • PHP实战:安全实现文件上传功能教程
  • SQL进阶之旅 Day 5: 常用函数与表达式
  • K8s边缘集群赋能工业自动化:从传感器监控到智能决策的全流程升级
  • 跨协议协同智造新实践:DeviceNet-EtherCAT网关驱动汽车焊接装配效能跃迁
  • UE5 蓝图,隐藏一个Actor,同时隐藏它的所有子物体
  • OpenCV CUDA模块图像处理------颜色空间处理之GPU 上交换图像的通道顺序函数swapChannels()
  • 【STM32】HAL库 之 CAN 开发指南
  • JS高级 - 对象
  • 十一、Samba文件共享服务
  • 2025年- H55-Lc163--124. 二叉树的最大路径和(深搜)--Java版
  • 以知识管理赋能 DevSecOps,加速关键领域软件自主演进
  • 字符串day7
  • 11.12 LangGraph全局共享状态实战:200ms实现50+仓库AI协同,效率飙升!
  • 科技赋能建筑行业,智能楼宇自控系统崭露头角成发展新势力