/***************************************************************************** * Qwt Examples - Copyright (C) 2002 Uwe Rathmann * This file may be used under the terms of the 3-clause BSD License *****************************************************************************/ #include "Plot.h" #include "Editor.h" #include #include #include #include #include #include #include namespace { class Legend : public QwtLegend { protected: virtual QWidget* createWidget( const QwtLegendData& legendData ) const QWT_OVERRIDE { QWidget* w = QwtLegend::createWidget( legendData ); if ( w ) { w->setStyleSheet( "border-radius: 5px;" "padding: 2px;" "background: LemonChiffon;" ); } return w; } }; } Plot::Plot( QWidget* parent ) : QwtPlot( parent ) { setAutoReplot( false ); setTitle( "Movable Items" ); const int margin = 5; setContentsMargins( margin, margin, margin, margin ); setAutoFillBackground( true ); setPalette( QColor( "DimGray" ).lighter( 110 ) ); QwtPlotCanvas* canvas = new QwtPlotCanvas(); #if 0 // a gradient making a replot slow on X11 canvas->setStyleSheet( "border: 2px solid Black;" "border-radius: 15px;" "background-color: qlineargradient( x1: 0, y1: 0, x2: 0, y2: 1," "stop: 0 LemonChiffon, stop: 0.5 PaleGoldenrod, stop: 1 LemonChiffon );" ); #else canvas->setStyleSheet( "border: 2px inset DimGray;" "border-radius: 15px;" "background: LemonChiffon;" ); #endif setCanvas( canvas ); insertLegend( new Legend(), QwtPlot::RightLegend ); populate(); updateAxes(); for ( int axis = 0; axis < QwtAxis::AxisPositions; axis++ ) setAxisAutoScale( axis, false ); m_editor = new Editor( this ); ( void ) new QwtPlotMagnifier( canvas ); } void Plot::populate() { addShape( "Rectangle", ShapeFactory::Rect, "RoyalBlue", QPointF( 30.0, 50.0 ), QSizeF( 40.0, 50.0 ) ); addShape( "Ellipse", ShapeFactory::Ellipse, "IndianRed", QPointF( 80.0, 130.0 ), QSizeF( 50.0, 40.0 ) ); addShape( "Ring", ShapeFactory::Ring, "DarkOliveGreen", QPointF( 30.0, 165.0 ), QSizeF( 40.0, 40.0 ) ); addShape( "Triangle", ShapeFactory::Triangle, "SandyBrown", QPointF( 165.0, 165.0 ), QSizeF( 60.0, 40.0 ) ); addShape( "Star", ShapeFactory::Star, "DarkViolet", QPointF( 165.0, 50.0 ), QSizeF( 40.0, 50.0 ) ); addShape( "Hexagon", ShapeFactory::Hexagon, "DarkSlateGray", QPointF( 120.0, 70.0 ), QSizeF( 50.0, 50.0 ) ); } void Plot::addShape( const QString& title, ShapeFactory::Shape shape, const QColor& color, const QPointF& pos, const QSizeF& size ) { QwtPlotShapeItem* item = new QwtPlotShapeItem( title ); item->setItemAttribute( QwtPlotItem::Legend, true ); item->setLegendMode( QwtPlotShapeItem::LegendShape ); item->setLegendIconSize( QSize( 20, 20 ) ); item->setRenderHint( QwtPlotItem::RenderAntialiased, true ); item->setShape( ShapeFactory::path( shape, pos, size ) ); QColor fillColor = color; fillColor.setAlpha( 200 ); QPen pen( color, 3 ); pen.setJoinStyle( Qt::MiterJoin ); item->setPen( pen ); item->setBrush( fillColor ); item->attach( this ); } void Plot::exportPlot() { QwtPlotRenderer renderer; renderer.exportTo( this, "shapes.pdf" ); } void Plot::setMode( int mode ) { m_editor->setMode( static_cast< Editor::Mode >( mode ) ); } #include "moc_Plot.cpp"