-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathqwt_thermo.h
157 lines (117 loc) · 3.84 KB
/
qwt_thermo.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#pragma once
#include "qwt_abstract_scale.h"
#include <qwidget.h>
class QwtScaleDraw;
class QwtColorMap;
/*!
\brief The Thermometer Widget
QwtThermo is a widget which displays a value in an interval. It supports:
- a horizontal or vertical layout;
- a range;
- a scale;
\image html sysinfo.png
The fill colors might be calculated from an optional color map
If no color map has been assigned QwtThermo uses the
following colors/brushes from the widget palette:
- QPalette::Base
Background of the pipe
- QPalette::ButtonText
Fill brush
- QPalette::WindowText
For the axis of the scale
- QPalette::Text
For the labels of the scale
By default, the scale and range run over the same interval of values.
QwtAbstractScale::setScale() changes the interval of the scale and allows
easy conversion between physical units.
The example shows how to make the scale indicate in degrees Fahrenheit and
to set the value in degrees Kelvin:
\code
#include <qapplication.h>
#include <qwt_thermo.h>
double Kelvin2Fahrenheit(double kelvin)
{
// see http://en.wikipedia.org/wiki/Kelvin
return 1.8*kelvin - 459.67;
}
int main(int argc, char **argv)
{
const double minKelvin = 0.0;
const double maxKelvin = 500.0;
QApplication a(argc, argv);
QwtThermo t;
t.setRange(minKelvin, maxKelvin);
t.setScale(Kelvin2Fahrenheit(minKelvin), Kelvin2Fahrenheit(maxKelvin));
// set the value in Kelvin but the scale displays in Fahrenheit
// 273.15 Kelvin = 0 Celsius = 32 Fahrenheit
t.setValue(273.15);
a.setMainWidget(&t);
t.show();
return a.exec();
}
\endcode
\todo Improve the support for a logarithmic range and/or scale.
*/
class QwtThermo: public QWidget, public QwtAbstractScale
{
Q_OBJECT
public:
/*!
Scale position. QwtThermo tries to enforce valid combinations of its
orientation and scale position:
- Qt::Horizonal combines with NoScale, TopScale and BottomScale
- Qt::Vertical combines with NoScale, LeftScale and RightScale
\sa setOrientation(), setScalePosition()
*/
enum ScalePos
{
//! No scale
NoScale,
//! The scale is left of the pipe
LeftScale,
//! The scale is right of the pipe
RightScale,
//! The scale is above the pipe
TopScale,
//! The scale is below the pipe
BottomScale
};
explicit QwtThermo( QWidget *parent = NULL );
virtual ~QwtThermo();
void setOrientation( Qt::Orientation, ScalePos );
void setScalePosition( ScalePos s );
ScalePos scalePosition() const;
void setSpacing( int );
int spacing() const;
void setBorderWidth( int w );
int borderWidth() const;
void setFillBrush( const QBrush &b );
const QBrush &fillBrush() const;
void setColorMap( QwtColorMap * );
QwtColorMap *colorMap();
const QwtColorMap *colorMap() const;
void setPipeWidth( int w );
int pipeWidth() const;
void setMaxValue( double v );
double maxValue() const;
void setMinValue( double v );
double minValue() const;
double value() const;
void setRange( double vmin, double vmax, bool lg = false );
virtual QSize sizeHint() const;
virtual QSize minimumSizeHint() const;
void setScaleDraw( QwtScaleDraw * );
public Q_SLOTS:
virtual void setValue( double val );
protected:
virtual void drawLiquid( QPainter *, const QRect & ) const;
virtual void scaleChange();
virtual void paintEvent( QPaintEvent * );
virtual void resizeEvent( QResizeEvent * );
virtual void changeEvent( QEvent * );
QRect pipeRect() const;
private:
void layoutThermo( bool );
class PrivateData;
PrivateData *d_data;
};