东莞做网站企业,网页设计的风格可分为两大类,网站建设搭建环境,scratch在线编程网站目录
QPaintEvent绘图事件
常见事件
QPainter
初始化 QPainter
设置画笔和画刷
绘制图形
结束绘制
画线
画矩形
画圆形
画弧线
画扇形
指定画笔大小 QPen
抗锯齿
无边框
画指针 多边形
渐变色 QLinearGradient
使用步骤
示例一 线性渐变 示例二 径向渐…目录
QPaintEvent绘图事件
常见事件
QPainter
初始化 QPainter
设置画笔和画刷
绘制图形
结束绘制
画线
画矩形
画圆形
画弧线
画扇形
指定画笔大小 QPen
抗锯齿
无边框
画指针 多边形
渐变色 QLinearGradient
使用步骤
示例一 线性渐变 示例二 径向渐变
示例三 圆锥形渐变
保存当前坐标轴
旋转坐标轴
画一个图片 QPaintEvent绘图事件
常见事件
窗口第一次显示时当窗口或控件第一次出现在屏幕上时系统会生成一个 QPaintEvent 事件 通知窗口进行自身的绘制。窗口大小改变时当用户改变窗口的大小时窗口的内容通常需要重新绘制以适应新的尺寸。窗口部分被遮挡后又重新显示时如果窗口被其他窗口遮挡然后又重新露出来被遮挡的部分通 常需要重新绘制。手动请求重绘通过调用 QWidget 的 update() 或 repaint() 方法可以手动触发重绘事件。
触发事件便会执行paintEvent(QPaintEvent *)我们可以重写QWidget 的 paintEvent(QPaintEvent *) 方法来处理绘制逻辑
protected:void paintEvent(QPaintEvent *event) override {QPainter painter(this);//上面事件就会触发这个函数}QPainter
QPainter 是 Qt 库中用于在屏幕上进行绘画的类。它提供了各种绘制功能比如画线、画图形、画文本等
初始化 QPainter
想要绘画就要有纸才能画纸可以是一个窗口QWidget或一个照片QPixmap
QPainter painter(this);
//this便指的是纸
设置画笔和画刷
设置描边或者填充色块
painter.setPen(Qt::blue); // 设置画笔颜色为蓝色
painter.setBrush(Qt::yellow); // 设置画刷颜色为黄色
绘制图形
设置字体、绘制线条、矩形、圆形、文本等窗口的左上角是x和y的0点往右x增大往下y增大
painter.drawLine(10, 10, 100, 100); // 画线
painter.drawRect(10, 10, 100, 100); // 画矩形
painter.setFont(QFont(Arial,30)); // 设置字体
painter.drawText(10, 10, Hello); // 指定位置画文本
painter.drawText(rect(), Qt::AlignCenter, Hello); // 窗口中间画文本如果你想一开始就在窗口画就在触发的事件函数里画widget::paintEvent(QPaintEvent *event)结束绘制
完成绘制后 QPainter 对象会在其析构函数中自动结束绘制
画线
painter.drawLine(10, 10, 100, 100);
painter.drawLine(QLine(10, 10, 100, 100));
painter.drawLine(QPoint(10, 10), QPoint(100, 100));
画矩形
QRect rec(20,100,220,200);
painter.drawRect(rec);
painter.drawRect(20,100,220,200);画圆形
QRect rec(20,100,220,200);
painter.drawEllipse(rec);//在长方形内画椭圆
painter.drawEllipse(rect(),center(),200,100);//在窗口中间画椭圆
painter.drawEllipse(QPoint(60,500),20,20);//在窗口中间画椭圆
画弧线
正角度为逆时针负角度为顺时针从中间点的右边的为0°起始度
painter.drawArc(rec,30*16,120*16);//在矩形中画°弧线
painter.drawArc(30,100,200,360,30*16,120*16);//在矩形中画弧线画扇形
painter.drawArc(30,100,200,360,30*16,120*16);//在矩形中画扇形
指定画笔大小 QPen
QPen pen(Qt::blue,8);//初始化画笔
pointer.setPen(pen);//使用画笔
抗锯齿
painter.setRenderHint(QPainter::Antialiasing,true);//开启抗锯齿
无边框
painter.setPen(Qt::NoPen);
画指针 多边形 painter.setBrush(Qt::white);//白色笔刷painter.setPen(Qt::NoPen);//不使用任何画笔//制定多边形static const QPointF points[4] {QPointF(0,0.0),QPointF(200.0,-1.1),QPointF(200.0,1.1),QPointF(0,15.0),};//画一个多边形//一个 QPolygonF 对象它包含了多边形的顶点坐标 顶点数量painter.drawPolygon(points, 4);
渐变色 QLinearGradient
使用步骤
创建 QLinearGradient 对象指定渐变的起点和终点坐标设置颜色停靠点在渐变线上定义颜色和相应的位置使用渐变创建 QBrush 用 QLinearGradient 对象来创建一个 QBrush 然后用它在 QPainter 中进行绘制
示例一 线性渐变 //定义画刷QPainter painter(this);//定义渐变色 起始到终点QLinearGradient lineGradient(width()/2,0,width()/2,height());//从0-1之间制定颜色lineGradient.setColorAt(0.1,QColor(0,0,0,255));lineGradient.setColorAt(0.3,QColor(0,0,0,180));lineGradient.setColorAt(0.5,QColor(0,0,0,100));lineGradient.setColorAt(1,Qt::white);//将渐变色应用到画刷上QBrush brush(lineGradient);//使用画刷painter.setBrush(brush);//画矩形painter.drawRect(rect()); 示例二 径向渐变 //定义绘图对象QPainter painter(this);//抗锯齿painter.setRenderHint(QPainter::Antialiasing,true);//定义渐变色 窗体中间 范围200QRadialGradient radialGradient(width()/2,height()/2,20);//红到黄radialGradient.setColorAt(0.1, Qt::red);radialGradient.setColorAt(1, Qt::yellow);//将渐变色设置给绘图对象painter.setBrush(QBrush(radialGradient));//无边框painter.setPen(Qt::NoPen);//画矩形painter.drawRect(150,250,400,200);
示例三 圆锥形渐变
// 创建一个 QConicalGradient 对象
QConicalGradient conicalGradient(100, 100, 0); // 中心点 (100, 100)起始角度 0
// 添加颜色停靠点
conicalGradient.setColorAt(0.0, Qt::red);
conicalGradient.setColorAt(0.5, Qt::blue);
conicalGradient.setColorAt(1.0, Qt::red);
// 使用这个渐变创建 QBrush
QBrush brush(conicalGradient);
// 使用 QBrush 进行绘图
QPainter painter(this);
painter.setBrush(brush);
painter.setPen(Qt::NoPen); // 无边框
painter.drawRect(this-rect()); // 绘制扇形覆盖整个小部件
保存当前坐标轴
painter.save();//保存当前的坐标轴
painter.restore();//坐标轴回到保存的坐标轴
旋转坐标轴
painter.rotate(90);//顺时针旋转90°
画一个图片 QRect rectangle(-65,radius*0.38,130,50);//画一个矩形painter.drawPixmap(rectangle,QPixmap(:/icon.png));//在矩形里加载图片