QT-画一个简易仪表盘玩玩

效果如下:
在这里插入图片描述
在这里插入图片描述
思路如下:
1、先画两个圆,构成外围的圆环。
2、画指示箭头。
3、画刻度和刻度上数字
4、添加一个横向滑块用于动态显示。
5、添加两个标签用于速度显示。

直接上代码:

头文件:
#ifndef PAINT_H
#define PAINT_H

#include <QMainWindow>
#include <QPaintEvent>
#include <QPainter>
#include <QPen>
#include <QLinearGradient>
#include <QSlider>
#include <QDebug>
#include <QString>
namespace Ui {
class Paint;
}

class Paint : public QMainWindow
{
    Q_OBJECT

public:
    explicit Paint(QWidget *parent = 0);
    ~Paint();
protected:
    void drawCrown(QPainter *painter);//外环
    void drawArrow(QPainter *painter);//箭头
    void drawCalibration(QPainter *painter);//刻度
    void drawNumber(QPainter *painter);//刻度数字
    void drawSpeed(QPainter *p);//速度显示
    void paintEvent(QPaintEvent *event);

private slots:

public:
    void memberInt();

private:
    unsigned int centerX;//圆心横坐标
    unsigned int centerY;//圆心纵坐标
    unsigned int outRadius;//外环半径
    unsigned int inRadius;//内环半径
    unsigned int value;//滑块当前值

private:
    Ui::Paint *ui;
};

#endif // PAINT_H
源文件:
#include "paint.h"
#include "ui_paint.h"

Paint::Paint(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::Paint)
{
    ui->setupUi(this);
    memberInt();
    ui->horizontalSlider->setMinimum(0);
    ui->horizontalSlider->setMaximum(360);
}

Paint::~Paint()
{
    delete ui;
}

void Paint::drawCrown(QPainter *painter)
{
    painter->save();
    QLinearGradient H(350,400,650,400);
    H.setColorAt(0,Qt::black);
    H.setColorAt(1,Qt::blue);
    painter->setBrush(H);
    painter->setPen(Qt::NoPen);
    painter->drawEllipse(QPoint(centerX,centerY),outRadius,outRadius);
    painter->setBrush(Qt::lightGray);
    painter->drawEllipse(QPoint(centerX,centerY),inRadius,inRadius);
    painter->restore();
}

void Paint::drawArrow(QPainter *painter)
{
    painter->save();
    QPen pen;
    pen.setColor(Qt::red);
    pen.setWidth(6);
    pen.setStyle(Qt::SolidLine);
    painter->setPen(pen);
    painter->translate(centerX,centerY);
    value = ui->horizontalSlider->value();
    painter->rotate(value);
    painter->drawLine(0,0,-300,0);
    painter->drawLine(-300,0,-260,-20);
    painter->drawLine(-300,0,-260,20);
    this->update();
    painter->restore();
}

void Paint::drawCalibration(QPainter *painter)
{
    QPen pen;
    pen.setColor(Qt::black);
    pen.setWidth(5);
    pen.setStyle(Qt::SolidLine);
    painter->setPen(pen);
    painter->translate(centerX,centerY);
    for(int i = 0; i<360;i+=10)
    {
        painter->save();
        painter->rotate(i);
        painter->drawLine(-inRadius,0,-inRadius+10,0);
        painter->restore();
    }
}

void Paint::drawNumber(QPainter *painter)
{
    for(int i = 0; i<360;i+=10)
    {
            QString str;
            painter->save();
            painter->rotate(i);
            painter->drawText(-inRadius+10,0,str.setNum(i));
            painter->restore();
    }
}

void Paint::drawSpeed(QPainter *p)
{
    QString str;
    ui->label->setGeometry(400,500,160,80);
    ui->label_2->setGeometry(500,500,160,80);
    int speed = ui->horizontalSlider->value();
    ui->label->setText(str.setNum(speed));
    ui->label_2->setText("Km/h");
}

void Paint::paintEvent(QPaintEvent *event)
{

    QPainter painter(this);
    drawCrown(&painter);
    drawArrow(&painter);
    drawCalibration(&painter);
    drawNumber(&painter);
    drawSpeed(&painter);
}

void Paint::memberInt()
{
    centerX = 500;
    centerY = 400;
    outRadius = 360;
    inRadius  = 340;
    value = 0;
}

刚学QT画的简易仪表盘,好多地方没有深究、没有细化。大佬莫细追。
好记性不如烂笔头,每天进步一点点。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值