绘制需在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_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
protected:
void paintEvent(QPaintEvent *event) override;
private:
Ui::Widget *ui;
QTimer *timer;
};
#endif // WIDGET_H