QT 绘图与重绘事件

代码实现仪表盘

.cpp

cpp 复制代码
#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->Slidersudu->setMaximum(300);
    ui->Slidersudu->setMinimum(0);
    connect(ui->Slidersudu,SIGNAL(valueChanged(int)),this,SLOT(hSliderValueChangedSlot(int)));
}

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

void Widget::paintEvent(QPaintEvent *event)
{
    QPainter p (this);
    p.translate( this->width()/2, this->height()/2);
    QBrush brush; brush.setColor(QColor(0,42,79));  brush.setStyle(Qt::SolidPattern);
    p.setBrush(brush);
    p.drawEllipse(-200,-200,400,400); //drawEllipse(x,y,w,h) 圆
    QBrush brush2; brush.setColor(QColor(0,0,0));  brush.setStyle(Qt::SolidPattern);
    p.setBrush(brush);
    p.drawEllipse(-175,-175,350,350);

    QBrush brush3; brush.setColor(QColor(0,180,150));  brush.setStyle(Qt::SolidPattern);
    p.setBrush(brush);
    p.drawEllipse(-75,-75,150,150);

    QBrush brush4; brush.setColor(QColor(0,0,0));  brush.setStyle(Qt::SolidPattern);
    p.setBrush(brush);
    p.drawEllipse(-40,-40,80,80);
    //划线
    p.rotate(120);
    QPen pen; pen.setColor( QColor(0,255,50));  pen.setWidth(3); pen.setStyle(Qt::SolidLine);
    p.setPen(pen);
    int log = 0;
    for(int i = 6;;)
    {
       p.rotate(i);
       log++;
       if(log == 50)
        {
           break;
       }
       if(log%2 == 0)
       {
       p.drawLine(120,0,140,0);
       }
       else if(log%2 != 0)
       {
        p.drawLine(110,0,140,0);
       }
    }
    p.rotate(60);
    p.rotate( ui->Slidersudu->value() );
    QPen pen2;pen2.setColor(QColor(255,0,0));pen2.setWidth(3);pen2.setStyle(Qt::SolidLine);
    p.setPen(pen2);
    p.drawLine(0,0,this->width()/3,0);
    this->update();
}

void Widget::hSliderValueChangedSlot(int)
{
    qDebug()<<__func__;
   this->update();
}

.h

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void paintEvent(QPaintEvent *event) override;
    void hSliderValueChangedSlot(int);


private:
    Ui::Widget *ui;
};
#endif // WIDGET_H

现象

相关推荐
Hesionberger16 分钟前
LeetCode406:重建身高队列精髓解析
开发语言·数据结构·python·算法·leetcode
Qimooidea34 分钟前
祁木 CAD Translator 深度评测:从参数解析到工程交付实战
java·开发语言·人工智能·机器翻译
小白学大数据1 小时前
企业内网场景下 Python 自定义 CA 证书信任链的正确配置方法
开发语言·网络·python·信任链
Java面试题总结1 小时前
使用 Python 在 Excel 中添加和自定义文本框
开发语言·python·excel
geovindu1 小时前
CSharp: Recursion Algorithm
开发语言·后端·算法·c#·递归算法
dsyyyyy11011 小时前
用JavaScript实现排序算法
开发语言·javascript·排序算法
CHANG_THE_WORLD1 小时前
逐层拆解:C++ 虚函数从对象内存到手工调用的完整过程
java·开发语言·c++
Scott9999HH1 小时前
2026 避坑实录:国产品牌压力变送器什么牌子好?从硬件抗扰到 C++ Qt 实时曲线绘制源码剖析
开发语言·c++·qt
geats人山人海2 小时前
c# 第八章 多态与案例
开发语言·c#
ch_atu2 小时前
使用python下载modelscope上的模型
开发语言·python