QT第五天作业

本文介绍了如何在Qt中创建一个带有动态图形和滑块的Widget,着重展示了paintEvent方法的使用,以及如何处理滑块值变化时的响应和窗口重绘。
摘要由CSDN通过智能技术生成

 

#include "widget.h"
#include "ui_widget.h"
#include <QPainter>
#include <QPen>
#include <QBrush>
#include <QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    ui->horizontalSlider->setMaximum(100);
    ui->horizontalSlider->setMinimum(0);
    connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),this,SLOT(hSliderValueChangdedSlot(int)));
}

Widget::~Widget()
{
    delete ui;
}
void Widget::paintEvent(QPaintEvent *event){
    double R = this->width()/3;
        double r = R * 0.95;
     QPainter p(this);
     p.translate(this->width()/2,this->height()/2);
     p.setPen(Qt::NoPen);
     QBrush brush;
     //dayuan
     brush.setColor(QColor(90,90,90));
     brush.setStyle(Qt::SolidPattern);
     p.setBrush(brush);
     p.drawEllipse(-R,-R,2*R,2*R);
     //xiaoyuan
     brush.setColor(QColor(10,10,10));
     p.setBrush(brush);
     p.drawEllipse(-r,-r,r*2,r*2);
     //
     brush.setColor(QColor(77,220,255));
     p.setBrush(brush);
     p.drawEllipse(-100,-100,200,200);
     //
     brush.setColor(QColor(0,0,0));
     p.setBrush(brush);
     p.drawEllipse(-60,-60,120,120);

     //
     QPen pen;pen.setColor(QColor(200,200,120 ));pen.setWidth(5);pen.setStyle(Qt::SolidLine);
     p.setPen(pen);
     p.save();
     int keduValue = 0;
     p.rotate(120);
     for(int i=0;i<=50;i++){
         pen.setColor(QColor(200,255-i*5,10 ));
         p.setPen(pen);
         if(i%5 == 0){
         p.drawLine(0.8*r,0,    0.9*r,0);
         //绘制文字
        QString str = QString("%1").arg(keduValue);
           p.drawText(0.7*r,0, str );
           keduValue+=10;
      }else {
           p.drawLine(0.85*r,0,    0.9*r,0);
      }
           p.rotate(6);
      }
     p.restore();
     p.rotate(120+3*ui->horizontalSlider->value());
     pen.setColor(QColor(255,255,0));
     p.setPen(pen);
     QPoint pi[3];  pi[0].setX(0); pi[0].setY(-5);pi[1].setX(0); pi[1].setY(5);
     pi[2].setX(r*0.8); pi[2].setY(0);
     p.drawConvexPolygon(pi, 3);
     //xiaoxiaoyuan
     brush.setColor(QColor(255,128,10));
     p.setBrush(brush);
     p.drawEllipse(-10,-10,20,20);
}

    void Widget::hSliderValueChangdedSlot(int)
    {
        qDebug()<<__func__;
        //通知,整个窗口重绘
        this->update();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值