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