#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include<QPainter>
#include<QTimer>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
int start_timer(int interval);
private:
int maxval =100;
int minval =0;
int curval =0;
QTimer *timer;
int timer_interval;
protected:
void paintEvent(QPaintEvent *event) override;
};
#endif // WIDGET_H
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
timer= new QTimer(this);
connect(timer,&QTimer::timeout,this,[=](){
curval+=5;
if(curval>maxval){
curval= 0;
}
update();
});
}
Widget::~Widget()
{
}
void Widget::paintEvent(QPaintEvent *event){
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing,true);
QPainterPath path ;
path.moveTo(10,10);
path.lineTo(width()-10,10);
path.lineTo(width()-10,height()-height()/3);
path.lineTo(width()-width()/3-10,height()-10);
path.lineTo(width()-2*width()/3-10,height()-10);
path.lineTo(10, height() - height() / 3);
path.closeSubpath();
painter.setBrush(Qt::NoBrush);//
painter.setClipPath(path);
painter.save();
painter.translate(0,height()-10);
painter.setPen(Qt::NoPen);
painter.setBrush(curval<0.8*maxval?Qt::yellow:Qt::red);
painter.drawRect(0,0,width(),-height()/(maxval-minval)*curval);
painter.restore();
painter.setPen(QPen(Qt::blue,3));
painter.drawPath(path);
painter.setFont(QFont("楷体",30));
painter.drawText(width()/2-90,height()/3,"目标值:"+QString::number(maxval));
painter.drawText(width()/2-90,height()/2,"当前值:"+QString::number(curval));
}
int Widget::start_timer(int interval){
timer->start(interval);
}
import sys
from PySide6.QtWidgets import *
from PySide6.QtCore import *
from PySide6.QtGui import *
class Window(QWidget):
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self._maxval=100
self._minval = 0
self._curval = 0
self.timer = QTimer(self)
self.timer.timeout.connect(self.On_timer)
self.timer.start(100)
def On_timer(self):
self._curval+=5
if self._curval>self._maxval:
self._curval =0
self.update()
print(self._curval)
def paintEvent(self, event):
painter = QPainter(self)
painter.setRenderHint(QPainter.RenderHint.Antialiasing,True)
path = QPainterPath()
path.moveTo(10,10)
path.lineTo(self.width()-10,10)
path.lineTo(self.width()-10,self.height()-self.height()/3)
path.lineTo(self.width()-self.width()/3-10,self.height()-10)
path.lineTo(self.width()-2*self.width()/3-10,self.height()-10)
path.lineTo(10, self.height() - self.height() / 3)
path.closeSubpath()
painter.setBrush(Qt.BrushStyle.NoBrush)
painter.setPen(QPen(Qt.red,3))
painter.setClipPath(path) #设置可
painter.setBrush(Qt.yellow if self._curval<0.8*self._maxval else Qt.red)
painter.save()
painter.translate(0,self.height()-10)
painter.setPen(Qt.PenStyle.NoPen)
painter.drawRect(0,0,self.width(),-self.height()/(self._maxval-self._minval)*self._curval)
painter.restore()
painter.setPen(QPen(Qt.blue,3))
painter.setBrush(Qt.BrushStyle.NoBrush)
painter.drawPath(path)
painter.setFont(QFont("楷体",30))
painter.drawText(self.width()/2-80,self.height()/3,f"目标值{self._maxval}")
painter.drawText(self.rect(),Qt.AlignmentFlag.AlignCenter,f"当前值{self._curval}")
if __name__ == '__main__':
app = QApplication(sys.argv)
win = Window()
win.show()
sys.exit(app.exec())