2D制图实战之绘制星球

#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();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值