107 lines
2.9 KiB
C++
107 lines
2.9 KiB
C++
#include "plot.h"
|
|
#include "curvetracker.h"
|
|
#include <qwt_picker_machine.h>
|
|
#include <qwt_plot_layout.h>
|
|
#include <qwt_plot_canvas.h>
|
|
#include <qwt_plot_grid.h>
|
|
#include <qwt_plot_textlabel.h>
|
|
#include <qwt_plot_zoneitem.h>
|
|
#include <qwt_plot_curve.h>
|
|
#include <qwt_plot_layout.h>
|
|
#include <qwt_scale_widget.h>
|
|
#include <qwt_symbol.h>
|
|
|
|
Plot::Plot( QWidget *parent ):
|
|
QwtPlot( parent)
|
|
{
|
|
setPalette( Qt::black );
|
|
|
|
// we want to have the axis scales like a frame around the
|
|
// canvas
|
|
plotLayout()->setAlignCanvasToScales( true );
|
|
for ( int axis = 0; axis < QwtPlot::axisCnt; axis++ )
|
|
axisWidget( axis )->setMargin( 0 );
|
|
|
|
QwtPlotCanvas *canvas = new QwtPlotCanvas();
|
|
canvas->setAutoFillBackground( false );
|
|
canvas->setFrameStyle( QFrame::NoFrame );
|
|
setCanvas( canvas );
|
|
|
|
setAxisScale( QwtPlot::yLeft, 0.0, 10.0 );
|
|
|
|
// a title
|
|
QwtText title( "Picker Demo" );
|
|
title.setColor( Qt::white );
|
|
title.setRenderFlags( Qt::AlignHCenter | Qt::AlignTop );
|
|
|
|
QFont font;
|
|
font.setBold( true );
|
|
title.setFont( font );
|
|
|
|
QwtPlotTextLabel *titleItem = new QwtPlotTextLabel();
|
|
titleItem->setText( title );
|
|
titleItem->attach( this );
|
|
|
|
#if 1
|
|
// section
|
|
|
|
//QColor c( "PaleVioletRed" );
|
|
|
|
QwtPlotZoneItem* zone = new QwtPlotZoneItem();
|
|
zone->setPen( Qt::darkGray );
|
|
zone->setBrush( QColor( "#834358" ) );
|
|
zone->setOrientation( Qt::Horizontal );
|
|
zone->setInterval( 3.8, 5.7 );
|
|
zone->attach( this );
|
|
|
|
#else
|
|
// grid
|
|
|
|
QwtPlotGrid *grid = new QwtPlotGrid();
|
|
grid->setMajorPen( Qt::white, 0, Qt::DotLine );
|
|
grid->setMinorPen( Qt::gray, 0 , Qt::DotLine );
|
|
grid->attach( this );
|
|
#endif
|
|
|
|
// curves
|
|
|
|
QPolygonF points1;
|
|
points1 << QPointF( 0.2, 4.4 ) << QPointF( 1.2, 3.0 )
|
|
<< QPointF( 2.7, 4.5 ) << QPointF( 3.5, 6.8 )
|
|
<< QPointF( 4.7, 7.9 ) << QPointF( 5.8, 7.1 );
|
|
|
|
insertCurve( "Curve 1", "DarkOrange", points1 );
|
|
|
|
QPolygonF points2;
|
|
points2 << QPointF( 0.4, 8.7 ) << QPointF( 1.4, 7.8 )
|
|
<< QPointF( 2.3, 5.5 ) << QPointF( 3.3, 4.1 )
|
|
<< QPointF( 4.4, 5.2 ) << QPointF( 5.6, 5.7 );
|
|
|
|
insertCurve( "Curve 2", "DodgerBlue", points2 );
|
|
|
|
CurveTracker* tracker = new CurveTracker( this->canvas() );
|
|
|
|
// for the demo we want the tracker to be active without
|
|
// having to click on the canvas
|
|
tracker->setStateMachine( new QwtPickerTrackerMachine() );
|
|
tracker->setRubberBandPen( QPen( "MediumOrchid" ) );
|
|
}
|
|
|
|
void Plot::insertCurve( const QString &title,
|
|
const QColor &color, const QPolygonF &points )
|
|
{
|
|
QwtPlotCurve *curve = new QwtPlotCurve();
|
|
curve->setTitle( title );
|
|
curve->setPen( color, 2 ),
|
|
curve->setRenderHint( QwtPlotItem::RenderAntialiased, true );
|
|
|
|
QwtSymbol *symbol = new QwtSymbol( QwtSymbol::Ellipse,
|
|
QBrush( Qt::white ), QPen( color, 2 ), QSize( 8, 8 ) );
|
|
curve->setSymbol( symbol );
|
|
|
|
curve->setSamples( points );
|
|
|
|
curve->attach( this );
|
|
}
|
|
|
|
|