查看完整版本: [-- 授人以鱼不如授人以渔-圆形刻度盘或者进度条各种计算公式 --]

QTCN开发网 -> Qt 作品展 -> 授人以鱼不如授人以渔-圆形刻度盘或者进度条各种计算公式 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

komany 2017-01-19 10:53

授人以鱼不如授人以渔-圆形刻度盘或者进度条各种计算公式

  1. 网上实在找不到计算公式,下面是我动手制作过程中摸索出来的,不准的地方望海涵,有了这公式,刻度盘,进度条随你搞,哈哈哈哈!
    遇到事情还是要多动手!!!
    [attachment=16362]
    #ifndef MAINWINDOW_H
    #define MAINWINDOW_H
    #include <QLabel>
    #include <QMainWindow>

    namespace Ui {
    class MainWindow;
    }

    class MainWindow : public QMainWindow
    {
        Q_OBJECT

    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
        void paintEvent(QPaintEvent *event);
    private:
        Ui::MainWindow *ui;
        QLabel    *l1;
        QLabel    *l2;
        QLabel    *l3;
    };

    #endif // MAINWINDOW_H

  1. #include "mainwindow.h"
    #include "ui_mainwindow.h"

    #include <QPainter>
    //当前值
    const int u =43;
    //最大刻度
    const int nMax = 100;
    //最小刻度
    const int nMin = 0;
    //旋转角度
    const double nPercentRotate = 40;
    //
    const int nMaxRadus = 200;

    const int nMinRadus = 150;

    const int nDistance = 50;
    //最外面的大圆
    const int nDistance2 = 70;
    //原点
    int nOrgXpos     = 0;
    int nOrgYpos     = 0;

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    {
        ui->setupUi(this);

        nOrgXpos = width() / 2;

        nOrgYpos = height() / 2;

        l1 = new QLabel(this);

        l1->setText(QString("44"));

        l1->move(nOrgXpos   ,nOrgYpos );

        l2 = new QLabel(this);

        l3 = new QLabel(this);

        l2->setText(QString("Min"));
        //这个地方要注意
        l2->move(nOrgXpos - nMinRadus, nOrgYpos + nMinRadus );

        l3->setText(QString("Max"));

        l3->move(nOrgXpos  + (nMinRadus ) , nOrgYpos +  (nMinRadus ) );



    }

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

    void MainWindow::paintEvent(QPaintEvent *event)
    {
        QColor use(112,222,121);
        QColor nouse(223,123,111);
        QPainter p(this);
        double nRotate = (360.0 - 2 * nPercentRotate) / (nMax - nMin);
        p.setRenderHint(QPainter::Antialiasing);
        p.setRenderHint(QPainter::SmoothPixmapTransform);

        p.save();
        p.translate(nOrgXpos, nOrgYpos);
        p.rotate(nPercentRotate);
        p.setPen(use);
        for(int i = 0 ; i < u; i++){

            p.drawLine(0,nMinRadus,0,nMaxRadus);
            p.rotate(nRotate);
        }
        p.setPen(nouse);
        for(int i = u ; i < nMax ; i++){

            p.drawLine(0,nMinRadus,0,nMaxRadus);
            p.rotate(nRotate);
        }
        p.restore();

        p.setPen(QColor(11,22,33));
        p.drawEllipse(nOrgXpos - nMinRadus + nDistance/2  , nOrgYpos  - nMinRadus  + nDistance/2   , nMinRadus * 2 - nDistance , nMinRadus * 2 - nDistance );

        p.restore();
        p.setPen(QColor(11,22,33));
        p.drawEllipse(nOrgXpos -  nMaxRadus - nDistance2/2  , nOrgYpos  -  nMaxRadus -  nDistance2/2 , nMaxRadus * 2 + nDistance2, nMaxRadus * 2 + nDistance2);
    }




liudianwu 2017-01-19 11:23
嗯,挺好,挺到位!

boylebao 2017-01-19 15:41

liuqiaoping 2022-04-01 11:05
平台上第一个可以运行的代码,呜呜呜~


查看完整版本: [-- 授人以鱼不如授人以渔-圆形刻度盘或者进度条各种计算公式 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled