#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#pragma execution_character_set("utf-8")
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
timer = new QTimer;
connect(timer,SIGNAL(timeout()),this,SLOT(timeSlot()));
timer->start(15);
}
Widget::~Widget()
{
delete ui;
}
void Widget::paintEvent(QPaintEvent *)
{
QRadialGradient rad(251,251,50,251,251);
rad.setColorAt(0.0,Qt::red);
rad.setColorAt(1,Qt::yellow);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(QPen(Qt::green,1));
painter.setBrush(QBrush(Qt::white,Qt::NoBrush));
painter.drawEllipse(251-83,251-83,166,166);
painter.drawEllipse(251-150,251-150,300,300);//轨道绘图
painter.drawEllipse(251-205,251-205,410,410);
painter.setPen(QPen(Qt::yellow,5));
painter.setBrush(QBrush(rad));
painter.drawEllipse(201,201,100,100);//中心星球
painter.setPen(QPen(Qt::black,5));
painter.setBrush(QBrush(Qt::black,Qt::NoBrush));
//501 251,251
painter.translate(251,251);
//painter.drawEllipse(101,0,16,16);
painter.rotate(a);
painter.drawEllipse(142,0,15,15);//带卫星
painter.setPen(QPen(Qt::green,1));
painter.drawEllipse(127,-15,45,45);//实时绘出轨道
painter.setPen(QPen(Qt::black,10));
painter.rotate(a);
painter.drawEllipse(77,0,11,11);//最内,独立
painter.rotate(-a);
painter.rotate(-a/3);
painter.drawEllipse(198,0,13,13);//最外,独立
painter.rotate(+a/3);
painter.translate(150,7);
painter.rotate(a*2);
painter.drawEllipse(20,0,2,2);//卫星
painter.rotate(-a*2);
painter.rotate(-a);
}
void Widget::timeSlot()
{
static int i = 0;
i++;
a=i;
repaint();
}
2D制图实战之绘制星球
最新推荐文章于 2024-05-11 10:22:15 发布