QT控件大全 三十二 QPotPlug
来源:互联网 发布:淘宝收费标准 编辑:程序博客网 时间:2024/06/07 23:05
效果如图:
核心代码:
#ifndef QPOT1_H#define QPOT1_H#include <QtGui>#include <QtDesigner/QDesignerExportWidget>#include <math.h>#include <QWidget>class QPot1 : public QWidget{ Q_OBJECT Q_ENUMS(DisplayColor); Q_PROPERTY(double minValue READ minValue WRITE setMinValue); Q_PROPERTY(double maxValue READ maxValue WRITE setMaxValue); Q_PROPERTY(int wheelStep READ wheelStep WRITE setWheelStep); Q_PROPERTY(int fontDim READ fontDim WRITE setFontDim); Q_PROPERTY(int numPrec READ numPrec WRITE setPrecision); Q_PROPERTY(DisplayColor dispColor READ color WRITE setColor); public: QPot1(QWidget *parent = 0); QSize minimumSizeHint() const; QSize sizeHint() const; enum DisplayColor { white, green, red, yellow, magenta, cyan }; double actValue() const { return value; } double minValue() const { return min; } double maxValue() const { return max; } int wheelStep() const { return wheel; } int fontDim() const { return font; } int numPrec() const { return precision; } DisplayColor color() const { return dcolor; } signals: void valueChanged(double);public slots: void setMinValue(double); void setMaxValue(double); void setWheelStep(int); void setFontDim(int); void setPrecision(int); void setColor(DisplayColor); protected: void paintEvent(QPaintEvent *); void wheelEvent(QWheelEvent *); void paintLevel(); void paintDial(); void paintBorder(); void paintValue(); void paintScale();private: int spanAngle; int startAngle; int startPoint; double arc; double value; double min; double max; int wheel; int font; int precision; DisplayColor dcolor; };#endif
#include "qpot1.h"#include <QWidget>QPot1::QPot1(QWidget *parent) : QWidget(parent){ spanAngle = 0; startAngle = 225 * 16; startPoint = 225 * 16; min = 0; max = 100; value = 0; arc = 0; wheel = 1; font = 20; precision = 0; dcolor = green;}void QPot1::paintEvent(QPaintEvent *){ paintBorder(); paintDial(); paintScale(); paintValue(); paintLevel(); }void QPot1::paintScale(){ QPainter painter(this); painter.setWindow(-100, -100, 200, 250); painter.setRenderHint(QPainter::Antialiasing); painter.setPen(QPen(Qt::gray, 3, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); int nSteps1 = 6; painter.save(); for (int i=0; i<=nSteps1; i++) { painter.drawLine(-45, 45, -40, 40); painter.rotate(45); } painter.restore(); painter.setPen(QPen(Qt::gray, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); int nSteps2 = 18; painter.save(); for (int i=0; i<=nSteps2; i++) { painter.drawLine(-42, 42, -40, 40); painter.rotate(15); } painter.restore();}void QPot1::paintBorder(){ QPainter painter(this); painter.setWindow(-100, -100, 200, 250); painter.setRenderHint(QPainter::Antialiasing); painter.setPen(QPen(Qt::black, 2, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); QLinearGradient linGrad1(-90, 15, -85, 15); linGrad1.setColorAt(0, Qt::white); linGrad1.setColorAt(1, QColor(80,80,80)); linGrad1.setSpread(QGradient::PadSpread); painter.setBrush(linGrad1); QRectF border(-90, -90, 180, 230); painter.drawRect(border); painter.setPen(QPen(Qt::gray, 1, Qt::DotLine, Qt::RoundCap, Qt::RoundJoin)); QRectF border1(-70, -70, 140, 130); painter.drawRect(border1); QRectF border2(-70, 70, 140, 60); painter.drawRect(border2); }void QPot1::paintDial(){ QPainter painter(this); painter.setWindow(-100, -100, 200, 250); painter.setRenderHint(QPainter::Antialiasing); QLinearGradient linGrad(-48,0,96,0); linGrad.setColorAt(0, Qt::gray); linGrad.setColorAt(1, Qt::black); linGrad.setSpread(QGradient::PadSpread); painter.setBrush(linGrad); painter.setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); painter.drawEllipse(-48,-48,96,96); painter.setBrush(QBrush(Qt::black)); int nSteps = 35; painter.save(); for (int i=0; i<=nSteps; i++) { painter.drawEllipse(0, 0, 35, 15 ); painter.rotate(10); } painter.restore(); QRadialGradient radGrad(-33,0,50); radGrad.setColorAt(0, Qt::white); radGrad.setColorAt(1, Qt::gray); painter.setBrush(radGrad); painter.setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); painter.drawEllipse(-33,-33,66,66); painter.drawEllipse(-30,-30,60,60);}void QPot1::paintValue(){ QPainter painter(this); painter.setWindow(-100, -100, 200, 250); painter.setRenderHint(QPainter::Antialiasing); QColor color; switch (dcolor) { case white: color=QColor(Qt::white); break; case green: color=QColor(Qt::green); break; case red: color=QColor(Qt::red); break; case yellow: color=QColor(Qt::yellow); break; case magenta: color=QColor(Qt::magenta); break; case cyan: color=QColor(Qt::cyan); break; default: color=QColor(Qt::green); break; } painter.setPen(QPen(Qt::black, 1, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); painter.setBrush(Qt::black); QRectF valRect(-50, 75, 100, 50); painter.drawRect(valRect); QLinearGradient linGrad1(-50,100,-45,100); linGrad1.setColorAt(0, Qt::white); linGrad1.setColorAt(1, Qt::black); linGrad1.setSpread(QGradient::PadSpread); painter.setBrush(linGrad1); painter.setPen(QPen(Qt::black)); QRectF gradRect1(-50,75,100,50); painter.drawRect(gradRect1); QLinearGradient linGrad(0,75,0,150); linGrad.setColorAt(0, Qt::black); linGrad.setColorAt(1, color); linGrad.setSpread(QGradient::PadSpread); painter.setBrush(linGrad); painter.setOpacity(0.50); QRectF gradRect(-50, 75, 100, 50); painter.drawRect(gradRect); value = min + (-arc)*(max-min)/4320; QString actVal = QString("%1").arg(value,0,'f',precision); QFont valFont("SanSerifArial", font, QFont::Bold); painter.setFont(valFont); painter.setOpacity(1); painter.setPen(QPen(color)); painter.drawText(valRect, Qt::AlignCenter, actVal); emit valueChanged(value);}void QPot1::paintLevel(){ QPainter painter(this); painter.setWindow(-100, -100, 200, 250); painter.setRenderHint(QPainter::Antialiasing); painter.setPen(QPen(Qt::black, 7, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin)); painter.save(); painter.rotate(-arc/16); painter.drawLine(-18, 18, 0, 0); painter.restore();}void QPot1::setMinValue(double minValue){ min = minValue; update();}void QPot1::setMaxValue(double maxValue){ max = maxValue; update();}void QPot1::setWheelStep(int wheelStep){ wheel = wheelStep; update();}void QPot1::setFontDim(int fontDim){ font = fontDim; update();}void QPot1::setPrecision(int numPrec){ precision = numPrec; update();}void QPot1::setColor(DisplayColor dispColor){ dcolor = dispColor; update();}void QPot1::wheelEvent(QWheelEvent *e){ int delta = e->delta()/wheel; arc = spanAngle-delta; if (arc <= 0 && arc >= -270*16) { spanAngle = arc; startPoint = startPoint-delta; update(); }}QSize QPot1::minimumSizeHint() const{ return QSize(20, 25);}QSize QPot1::sizeHint() const{ return QSize(200, 250);}
源码工程:qq:609162385
阅读全文
0 0
- QT控件大全 三十二 QPotPlug
- Qt编写自定义控件大全
- QT控件大全一AnalogWidgets
- QT控件大全二VirtualKeyboard
- QT控件大全三QLed
- QT控件大全四QMeter
- QT控件大全五QProgressIndicator
- QT控件大全 六 QVUMeter
- QT控件大全 七 QProg
- QT控件大全 八 QNeedleIndicator
- QT控件大全 九 Qnightcharts
- QT控件大全 十 QPower
- QT控件大全 十一 QLock
- QT控件大全 十二 QScale
- QT控件大全 十三 WidgetMarqueeLabel
- QT控件大全 十四 QProgressmeter
- QT控件大全 十五 QPot
- QT控件大全 十五 QOpenChart
- mybatis逆向工程生成的mapper.xml文件部分修改
- java 怎么计算2个时间相差时分秒
- AndroidStudio添加module依赖遇到的问题
- 你的主机中的软件中止了一个已建立的连接
- springMVC上传和下载文件
- QT控件大全 三十二 QPotPlug
- Angular4中的I18N问题
- Select2插件 点击、选中事件 解读
- 【Scikit-Learn 中文文档】使用 scikit-learn 介绍机器学习 | ApacheCN
- C++重写(覆盖)、重载、重定义、多态
- 更改设置让Cheat Engine搜索数据
- Linux下的ip命令
- js蛋疼的Class(获取class对象)
- SpringMVC静态资源配置