1
2 #include <qwt_scale_map.h>
3 #include <qwt_plot_curve.h>
4 #include <qwt_symbol.h>
5 #include <qwt_math.h>
6 #include <qcolor.h>
7 #include <qpainter.h>
8 #include <qapplication.h>
9 #include <qframe.h>
10
11 //------------------------------------------------------------
12 // curvdemo1
13 //
14 // This example program features some of the different
15 // display styles of the QwtPlotCurve class
16 //------------------------------------------------------------
17
18
19 //
20 // Array Sizes
21 //
22 const int Size = 27;
23 const int CurvCnt = 6;
24
25 //
26 // Arrays holding the values
27 //
28 double xval[Size];
29 double yval[Size];
30 QwtScaleMap xMap;
31 QwtScaleMap yMap;
32
33 class MainWin : public QFrame
34 {
35 public:
36 MainWin();
37
38 protected:
39 virtual void paintEvent( QPaintEvent * );
40 void drawContents( QPainter *p );
41
42 private:
43 void shiftDown( QRect &rect, int offset ) const;
44
45 QwtPlotCurve d_curves[CurvCnt];
46 };
47
MainWin()48 MainWin::MainWin()
49 {
50 int i;
51
52 xMap.setScaleInterval( -0.5, 10.5 );
53 yMap.setScaleInterval( -1.1, 1.1 );
54
55 //
56 // Frame style
57 //
58 setFrameStyle( QFrame::Box | QFrame::Raised );
59 setLineWidth( 2 );
60 setMidLineWidth( 3 );
61
62 //
63 // Calculate values
64 //
65 for( i = 0; i < Size; i++ )
66 {
67 xval[i] = double( i ) * 10.0 / double( Size - 1 );
68 yval[i] = qSin( xval[i] ) * qCos( 2.0 * xval[i] );
69 }
70
71 //
72 // define curve styles
73 //
74 i = 0;
75
76 d_curves[i].setSymbol( new QwtSymbol( QwtSymbol::Cross, Qt::NoBrush,
77 QPen( Qt::black ), QSize( 5, 5 ) ) );
78 d_curves[i].setPen( Qt::darkGreen );
79 d_curves[i].setStyle( QwtPlotCurve::Lines );
80 d_curves[i].setCurveAttribute( QwtPlotCurve::Fitted );
81 i++;
82
83 d_curves[i].setSymbol( new QwtSymbol( QwtSymbol::Ellipse, Qt::yellow,
84 QPen( Qt::blue ), QSize( 5, 5 ) ) );
85 d_curves[i].setPen( Qt::red );
86 d_curves[i].setStyle( QwtPlotCurve::Sticks );
87 i++;
88
89 d_curves[i].setPen( Qt::darkBlue );
90 d_curves[i].setStyle( QwtPlotCurve::Lines );
91 i++;
92
93 d_curves[i].setPen( Qt::darkBlue );
94 d_curves[i].setStyle( QwtPlotCurve::Lines );
95 d_curves[i].setRenderHint( QwtPlotItem::RenderAntialiased );
96 i++;
97
98 d_curves[i].setPen( Qt::darkCyan );
99 d_curves[i].setStyle( QwtPlotCurve::Steps );
100 i++;
101
102 d_curves[i].setSymbol( new QwtSymbol( QwtSymbol::XCross, Qt::NoBrush,
103 QPen( Qt::darkMagenta ), QSize( 5, 5 ) ) );
104 d_curves[i].setStyle( QwtPlotCurve::NoCurve );
105 i++;
106
107
108 //
109 // attach data
110 //
111 for( i = 0; i < CurvCnt; i++ )
112 d_curves[i].setRawSamples( xval, yval, Size );
113 }
114
shiftDown(QRect & rect,int offset) const115 void MainWin::shiftDown( QRect &rect, int offset ) const
116 {
117 rect.translate( 0, offset );
118 }
119
paintEvent(QPaintEvent * event)120 void MainWin::paintEvent( QPaintEvent *event )
121 {
122 QFrame::paintEvent( event );
123
124 QPainter painter( this );
125 painter.setClipRect( contentsRect() );
126 drawContents( &painter );
127 }
128
129
130 //
131 // REDRAW CONTENTS
132 //
drawContents(QPainter * painter)133 void MainWin::drawContents( QPainter *painter )
134 {
135 int deltay, i;
136
137 QRect r = contentsRect();
138
139 deltay = r.height() / CurvCnt - 1;
140
141 r.setHeight( deltay );
142
143 //
144 // draw curves
145 //
146 for ( i = 0; i < CurvCnt; i++ )
147 {
148 xMap.setPaintInterval( r.left(), r.right() );
149 yMap.setPaintInterval( r.top(), r.bottom() );
150
151 painter->setRenderHint( QPainter::Antialiasing,
152 d_curves[i].testRenderHint( QwtPlotItem::RenderAntialiased ) );
153 d_curves[i].draw( painter, xMap, yMap, r );
154
155 shiftDown( r, deltay );
156 }
157
158 //
159 // draw titles
160 //
161 r = contentsRect(); // reset r
162 painter->setFont( QFont( "Helvetica", 8 ) );
163
164 const int alignment = Qt::AlignTop | Qt::AlignHCenter;
165
166 painter->setPen( Qt::black );
167
168 painter->drawText( 0, r.top(), r.width(), painter->fontMetrics().height(),
169 alignment, "Style: Line/Fitted, Symbol: Cross" );
170 shiftDown( r, deltay );
171
172 painter->drawText( 0, r.top(), r.width(), painter->fontMetrics().height(),
173 alignment, "Style: Sticks, Symbol: Ellipse" );
174 shiftDown( r, deltay );
175
176 painter->drawText( 0 , r.top(), r.width(), painter->fontMetrics().height(),
177 alignment, "Style: Lines, Symbol: None" );
178 shiftDown( r, deltay );
179
180 painter->drawText( 0 , r.top(), r.width(), painter->fontMetrics().height(),
181 alignment, "Style: Lines, Symbol: None, Antialiased" );
182 shiftDown( r, deltay );
183
184 painter->drawText( 0, r.top(), r.width(), painter->fontMetrics().height(),
185 alignment, "Style: Steps, Symbol: None" );
186 shiftDown( r, deltay );
187
188 painter->drawText( 0, r.top(), r.width(), painter->fontMetrics().height(),
189 alignment, "Style: NoCurve, Symbol: XCross" );
190 }
191
main(int argc,char ** argv)192 int main ( int argc, char **argv )
193 {
194 QApplication a( argc, argv );
195
196 MainWin w;
197
198 w.resize( 300, 600 );
199 w.show();
200
201 return a.exec();
202 }
203