QT控件大全 四十六 QSpeed
来源:互联网 发布:iso软件标准 编辑:程序博客网 时间:2024/06/05 11:18
描述:
源码工程:QQ:609162385
QtWidgets are custom widgets for Qt Creator. 所有部件可在QtCreator设计器窗口推向世界。
效果如图:
核心代码:
#ifndef QGAUGE_H#define QGAUGE_H#include <Qt>#include <QWidget>#include <QLCDNumber>#include <QPropertyAnimation>class QColor;class QGauge : public QWidget{ Q_OBJECT Q_ENUMS(errorCode); Q_PROPERTY(double value READ value WRITE setValue); Q_PROPERTY(double minValue READ minValue WRITE setMinValue); Q_PROPERTY(double maxValue READ maxValue WRITE setMaxValue); Q_PROPERTY(double threshold READ threshold WRITE setThreshold); Q_PROPERTY(int precision READ precision WRITE setPrecision); Q_PROPERTY(QString label READ label WRITE setLabel); Q_PROPERTY(QString units READ units WRITE setUnits); Q_PROPERTY(int steps READ steps WRITE setSteps); Q_PROPERTY(int startAngle READ startAngle WRITE setStartAngle); Q_PROPERTY(int endAngle READ endAngle WRITE setEndAngle); Q_PROPERTY(QColor foreground READ foreground WRITE setForeground); Q_PROPERTY(QColor background READ background WRITE setBackground); Q_PROPERTY(bool enableThreshold READ thresholdEnabled WRITE setThresholdEnabled); Q_PROPERTY(bool enableNumericIndicator READ enableNumericIndicator WRITE setNumericIndicatorEnabled); Q_PROPERTY(bool circularBarEnabled READ circularBarEnabled WRITE setCircularBarEnabled); Q_PROPERTY(bool coverGlassEnabled READ coverGlassEnabled WRITE setCoverGlassEnabled); Q_PROPERTY(int digitCount READ digitCount WRITE setDigitCount) Q_PROPERTY(int barSize READ barSize WRITE setBarSize)public: enum ErrorCode {MaxValueError=1,MinValueError,ThresholdError,TargetError,PrecisionError,ColorError,UnitsEmpty,OutOfRange}; QGauge(QWidget *parent = 0); ~QGauge(); double value() const { return m_value; } double minValue() const { return m_minValue; } double maxValue() const { return m_maxValue; } double threshold() const { return m_threshold; } int precision() const { return m_precision; } QString label()const { return m_label; } QString units()const { return m_units; } int steps() const { return m_steps; } int startAngle() { return m_startAngle;} int endAngle() { return m_endAngle; } QColor foreground() const { return m_foreground; } QColor background() const { return m_background; } bool thresholdEnabled() const { return m_thresholdEnabled; } bool enableNumericIndicator() const { return m_numericIndicatorEnabled; } bool circularBarEnabled() const {return m_circularBarEnabled; }; bool coverGlassEnabled() const {return m_coverGlassEnabled;}; int digitCount() const; int barSize() const {return m_barSize;};signals: void errorSignal(int); void thresholdAlarm(bool);public slots: void setValue(double); void setValue(int); void setMinValue(double); void setMinValue(int); void setMaxValue(double); void setMaxValue(int); void setThreshold(double); void setThreshold(int); void setPrecision(int); void setLabel(QString); void setUnits(QString); void setSteps(int); void setStartAngle(int); void setEndAngle(int); void setForeground(QColor); void setBackground(QColor); void setThresholdEnabled(bool); void setNumericIndicatorEnabled(bool); void setCircularBarEnabled(bool); void setCoverGlassEnabled(bool); void setDigitCount(int n_digits); void setBarSize(int barSize);protected: void paintEvent(QPaintEvent *event); void resizeEvent(QResizeEvent *event); void changeEvent(QEvent * event);private: void thresholdManager(); int digits(int val); void drawCrown(QPainter *painter); void drawBackground(QPainter *painter); void drawTicks(QPainter *painter); void drawCircularBar(QPainter *painter); void drawCoverGlass(QPainter *painter); void drawLabel(QPainter *painter); void drawUnits(QPainter *painter); void drawThresholdLine(QPainter *painter); double m_value; double m_maxValue, m_minValue; int m_precision; QString m_label; QString m_units; int m_steps; int m_barSize; int m_startAngle,m_endAngle; double m_threshold; bool m_autodigits; bool m_thresholdEnabled; bool m_numericIndicatorEnabled; bool m_circularBarEnabled; bool m_coverGlassEnabled; QColor m_foreground; QColor m_background; QLCDNumber* m_lcd;};#endif // QGAUGE_H
#include "qgauge.h"#include <QtGlobal>#include <QtGui>#include <QPainter>#include <QFont>QGauge::QGauge(QWidget *parent) : QWidget(parent){ m_lcd = new QLCDNumber(this); setPrecision(0); setSteps(20); setBarSize(5); setMinimumSize(QSize(80,80)); setMaximumSize(QSize(1024,1024)); setStartAngle(225); setEndAngle(-45); setForeground(QColor(0, 166, 8)); setBackground(Qt::black); setThresholdEnabled(false); setNumericIndicatorEnabled(true); int r,g,b; r=foreground().red(); g=foreground().green(); b=foreground().blue(); QString style=QString("background-color: transparent; color: rgb(%1,%2,%3);").arg(r).arg(g).arg(b); m_lcd->setStyleSheet(style); m_lcd->setSegmentStyle(QLCDNumber::Flat); m_autodigits=true; setMinValue(0); setMaxValue(100); setDigitCount(5); setValue(0); setLabel("Speed"); setUnits("Km/h"); setThreshold(80); setCircularBarEnabled(true); setCoverGlassEnabled(true); setEnabled(true);}QGauge::~QGauge(){ delete m_lcd;}int QGauge::digits(int val){ int digits = 0; if (val <= 0) digits = 1; // remove this line if '-' counts as a digit while (val) { val /= 10; digits++; } return digits;}void QGauge::setBarSize(int barSize){ m_barSize=barSize; update();}void QGauge::setValue(double value){ if(!isEnabled()) return; if(value>m_maxValue) { m_value=m_maxValue; emit errorSignal(OutOfRange); } else if(value<m_minValue) { m_value=m_minValue; emit errorSignal(OutOfRange); } else { m_value=value; if(m_autodigits) m_lcd->setDigitCount(digits(value)); if(m_lcd) m_lcd->display(m_value); } if(thresholdEnabled()) { thresholdManager(); if(value>=threshold()) { QString style=QString("background-color: transparent; color: rgb(200,0,0);"); m_lcd->setStyleSheet(style); } else { int r,g,b; r=foreground().red(); g=foreground().green(); b=foreground().blue(); QString style=QString("background-color: transparent; color: rgb(%1,%2,%3);").arg(r).arg(g).arg(b); m_lcd->setStyleSheet(style); } } else { int r,g,b; r=foreground().red(); g=foreground().green(); b=foreground().blue(); QString style=QString("background-color: transparent; color: rgb(%1,%2,%3);").arg(r).arg(g).arg(b); m_lcd->setStyleSheet(style); } update();}int QGauge::digitCount() const{ if(m_autodigits) return -1; if(m_lcd) return m_lcd->digitCount(); else return 0;}void QGauge::setValue(int value){ setValue((double)value); update();}void QGauge::setMinValue(double value){ m_minValue=value; update();}void QGauge::setMinValue(int value){ setMinValue((double)value);}void QGauge::setMaxValue(double value){ if(value > m_minValue) { m_maxValue=value; update(); } else emit errorSignal(MaxValueError);}void QGauge::setMaxValue(int value){ setMaxValue((double)value);}void QGauge::setThreshold(double value){ if(value > m_minValue && value < m_maxValue) { m_threshold=value; m_thresholdEnabled=true; update(); } else emit errorSignal(ThresholdError);}void QGauge::setThreshold(int value){ setThreshold((double)value);}void QGauge::setPrecision(int precision){ m_precision=precision; update();}void QGauge::setLabel(QString label){ m_label=label; update();}void QGauge::setUnits(QString units){ m_units=units; update();}void QGauge::setDigitCount(int n_digits){ if(n_digits>0) { if (m_lcd) m_lcd->setDigitCount(n_digits); } else m_autodigits=true; }void QGauge::resizeEvent(QResizeEvent *event){ Q_UNUSED(event); int side = qMin(width(), height()); m_lcd->setGeometry(width()/2-side/4,height()/2-side/6,side/2,side/3); update();}void QGauge::changeEvent(QEvent *event){ if(!isEnabled()) { QString style=QString("background-color: transparent; color: rgb(200,200,200);"); m_lcd->setStyleSheet(style); update(); } else setValue(value());}void QGauge::paintEvent(QPaintEvent *event){ Q_UNUSED(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); int side = qMin(width(), height()); painter.setViewport((width() - side) / 2, (height() - side) / 2,side, side); painter.setWindow(-50, -50, 100, 100); drawBackground(&painter); if(circularBarEnabled()) drawCircularBar(&painter); drawTicks(&painter); if(coverGlassEnabled()) drawCoverGlass(&painter); drawLabel(&painter); drawUnits(&painter); drawCrown(&painter); if(thresholdEnabled()) drawThresholdLine(&painter);}void QGauge::setCoverGlassEnabled(bool enable){ m_coverGlassEnabled=enable; update();}void QGauge::setSteps(int nSteps){ if(nSteps>1) { m_steps=nSteps; update(); } else nSteps=1;}void QGauge::setStartAngle(int value){ m_startAngle=value; update();}void QGauge::setEndAngle(int value){ m_endAngle=value; update();}void QGauge::setForeground(QColor newForeColor){ m_foreground=newForeColor; int r,g,b; r=foreground().red(); g=foreground().green(); b=foreground().blue(); QString style=QString("background-color: transparent; color: rgb(%1,%2,%3);").arg(r).arg(g).arg(b); m_lcd->setStyleSheet(style); update();}void QGauge::setBackground(QColor newBackColor){ m_background=newBackColor; int r,g,b; r=foreground().red(); g=foreground().green(); b=foreground().blue(); QString style=QString("background-color: transparent; color: rgb(%1,%2,%3);").arg(r).arg(g).arg(b); m_lcd->setStyleSheet(style); update();}void QGauge::thresholdManager(){ if(m_value > m_threshold) emit thresholdAlarm(true); else if(m_value < m_threshold) emit thresholdAlarm(false);}void QGauge::setThresholdEnabled(bool enable){ m_thresholdEnabled=enable; update();}void QGauge::setNumericIndicatorEnabled(bool enable){ m_numericIndicatorEnabled=enable; m_lcd->setVisible(enable); update();}void QGauge::setCircularBarEnabled(bool enable){ m_circularBarEnabled=enable; update();}
源码工程:QQ:609162385
阅读全文
0 0
- QT控件大全 四十六 QSpeed
- 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
- Effective TensorFlow Chapter 6: 在TensorFlow中的运算符重载
- python在linux下代码调试pdb
- servlet注解
- QtCreator快捷键
- javascript中get请求地址对中文处理方式
- QT控件大全 四十六 QSpeed
- 在linux系统上安装Greenplum数据库
- TensorFlow的55个经典案例
- 报错:java.lang.IllegalArgumentException: @EnableAsync annotation metadata was not injected
- 根据资源名称获取对应资源
- Windows下python环境搭建
- break, continue, return
- git设置当前用户
- 我的第一篇博客