Qt绘制扫描图

不多说直接上源码:

1.头文件

#ifndef UPGRADEFORM_H
#define UPGRADEFORM_H

#include <QWidget>
#include<QPainter>
#include"qmath.h"
#include<QDebug>
#include<QEvent>



#include<QTimer>
#ifdef quc
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
#include <QtDesigner/QDesignerExportWidget>
#else
#include <QtUiPlugin/QDesignerExportWidget>
#endif

class QDESIGNER_WIDGET_EXPORT upgradeForm : public QWidget
#else
class upgradeForm : public QWidget
#endif
{
    Q_OBJECT

public:
    upgradeForm(QWidget *parent = 0);
    ~upgradeForm();

    void resizeEvent(QResizeEvent *e);

    void paintEvent(QPaintEvent *e) override;
    void mousePressEvent(QMouseEvent *e) override;
    void drawBg(QPainter *painter);
    void drawXian(QPainter *painter);
    void drawShanxing(QPainter *painter);
    void drawRhombus(QPainter *painter);
    void setText(QPainter *painter);
    void drawCircle(QPainter *painter);
    void drawSomeText(QPainter *painter);
    void drawSomeLine(QPainter *painter);


public slots:

    void updateValue();
private:
    QTimer *timer = nullptr;


private:
    static int xuanzhuanjiao;
    float widthCtrl  ;
    float heightCtrl ;
    float angle  ;//菱形内角度
    int   count  ;
    bool flag = false;
};

#endif // UPGRADEFORM_H

2.cpp文件

#pragma execution_character_set("utf-8")
#include "upgradeform.h"


int upgradeForm::xuanzhuanjiao = 0;

upgradeForm::upgradeForm(QWidget *parent):QWidget(parent)
{


    widthCtrl = width();
    heightCtrl = height();
    angle  = 150;
    count  = 10;
    timer = new QTimer(this);
    timer->start(10);
    connect(timer,&QTimer::timeout,this,&upgradeForm::updateValue);
}

upgradeForm::~upgradeForm()
{
//    delete ui;
}

void upgradeForm::resizeEvent(QResizeEvent *)
{
    widthCtrl = width();
    heightCtrl = height();
}


/******************************************************
*函数名称:
*函数功能:
*函数参数:
*返回值:
******************************************************/
void upgradeForm::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setRenderHints(QPainter::Antialiasing|QPainter::TextAntialiasing);
//    drawBg(&painter);
//    drawRhombus(&painter);
//    setText(&painter);
//    drawXian(&painter);
    drawCircle(&painter);
    drawShanxing(&painter);
    drawSomeText(&painter);
    drawSomeLine(&painter);

}

void upgradeForm::mousePressEvent(QMouseEvent *)
{

    flag = true;
    update();
//    repaint();
    qDebug()<<this->width();
    qDebug()<<"mouse PRESS ENVENT";
}



/******************************************************
*函数名称:
*函数功能:绘制背景
*函数参数:
*返回值:
******************************************************/
void upgradeForm::drawBg(QPainter *painter)
{
    painter->save();
    painter->setPen(Qt::NoPen);
    painter->setBrush(QColor(220,220,220));
    QRectF rectangle(0.0, 0.0, 150, 30);
    painter->drawRoundedRect(rectangle,5,15,Qt::RelativeSize);


    painter->restore();
}
/******************************************************
*函数名称:
*函数功能:绘制进度滑块
*函数参数:
*返回值:
******************************************************/
void upgradeForm::drawRhombus(QPainter *painter)
{
    painter->save();
    painter->setPen(Qt::NoPen);
    double dd = ((double)widthCtrl)/count/2.0  ;
    dd = 0;
    float subwidth = widthCtrl/count/2.0f  ;
    for(int i = 0;i<count;i++)
    {
        QPointF points[4] = {
              QPointF(i*subwidth, 0),
              QPointF(qTan((angle-90)*M_PI/180)+i*subwidth,heightCtrl),
              QPointF(subwidth+qTan((angle-90)*M_PI/180)+i*subwidth, heightCtrl),
              QPointF((i+1)*subwidth, 0.0)
          };
        painter->drawConvexPolygon(points, 4);
        if(i%2 == 0)
            painter->setBrush(QColor("#FF0000"));
        else
            painter->setBrush(QColor("#00FF00"));
    }

    painter->restore();
}

void upgradeForm::drawXian(QPainter *painter)
{
    painter->save();

    painter->translate(width()/2,height()/2);

    painter->setPen(Qt::NoPen/*QColor("#FF0000")*/);

    painter->setBrush(QColor(0,255,0));
    painter->setRenderHint(QPainter::Antialiasing);
    int startAngle = 00*16;
    int spanAngle   = 90*16;
    painter->drawChord(0,0,180,160,startAngle,spanAngle);
    painter->restore();
}

void upgradeForm::drawShanxing(QPainter *painter)
{
    painter->save();
    painter->setPen(Qt::NoPen);
    painter->translate(width()/2,height()/2);
    painter->setRenderHint(QPainter::Antialiasing);
    int startAngle = 0*16;
    int spanAngle   = 30*16;
    int r = width()>height()?height()/2:width()/2;
    QConicalGradient  l1(0,0,0);
    l1.setColorAt(0,QColor(0,255,0,255));
    l1.setColorAt(1/12.0,QColor(0,255,0,0));//30/360
    painter->setBrush(l1);
    painter->rotate(-90+xuanzhuanjiao);
    painter->drawPie(-r/2,-r/2,r,r,startAngle,spanAngle);
   painter->restore();

}

void upgradeForm::setText(QPainter *painter)
{
    if(flag)
    {
        painter->save();
        painter->drawText(10,10,"鼠标按下事件触发");
        painter->restore();

    }

}

void upgradeForm::drawCircle(QPainter *painter)
{
    painter->save();
    painter->translate(width()/2,height()/2);
    int r = width()>height()?height()/2:width()/2;
    painter->setPen(/*QColor("#00eF00")*/Qt::NoPen);
    painter->setBrush(QColor(211,211,211));
    painter->drawEllipse(-r/2,-r/2,r,r);
    painter->restore();

}

void upgradeForm::drawSomeText(QPainter *painter)
{
    painter->save();
    painter->setRenderHint(QPainter::Antialiasing);
    painter->translate(width()/2,height()/2);
    int r = width()>height()?height()/2:width()/2;

    QFont font;
    font.setPixelSize(15);
    painter->setFont(font);
    painter->drawText(0,-r/2,"0");
    painter->drawText(r/2,0,"90");
    painter->drawText(0,r/2+font.pixelSize(),"180");
    painter->drawText(-r/2-font.pixelSize(),0,"270");

    painter->restore();

}

void upgradeForm::drawSomeLine(QPainter *painter)
{
    painter->save();

    painter->setRenderHint(QPainter::Antialiasing);
    painter->translate(width()/2,height()/2);
    painter->setPen(QPen(QColor(0, 206, 209),2,Qt::DotLine));
    int r = width()>height()?height()/2:width()/2;
    QLineF l1(QPoint(r/2,0),QPoint(-r/2,0));
    QLineF l2(QPoint(0,-r/2),QPoint(0,r/2));

    QVector<QLineF> vl;
    vl.push_back(l1);
    vl.push_back(l2);
    painter->drawLines(vl);
    painter->restore();

}

void upgradeForm::updateValue()
{
    if(xuanzhuanjiao>=360)
        xuanzhuanjiao = 0;
     xuanzhuanjiao++;
     update();


}

3.截图

猜你喜欢

转载自blog.csdn.net/weixin_41882459/article/details/111708820