HistoricPlot::HistoricPlot(QWidget *parent) :QwtPlot(parent) { //Fondo del canvas negro canvas()->setPalette(Qt::black); //Auto repintar las curvas setAutoReplot(true); setTitle("Historian Variable Plot"); // Grid m_grid = new QwtPlotGrid; m_grid->enableXMin( true ); m_grid->setMajorPen( Qt::gray, 0, Qt::DotLine ); m_grid->setMinorPen( Qt::darkGray, 0, Qt::DotLine ); m_grid->attach( this ); //Scale m_scaleDraw = new QwtDateScaleDraw( Qt::UTC ); m_scaleDraw->setDateFormat( QwtDate::Millisecond, "hh:mm:ss:zzz\nddd dd MMM yyyy" ); m_scaleDraw->setDateFormat( QwtDate::Second, "hh:mm:ss\nddd dd MMM yyyy" ); m_scaleDraw->setDateFormat( QwtDate::Minute, "hh:mm\nddd dd MMM yyyy" ); m_scaleDraw->setDateFormat( QwtDate::Hour, "hh:mm\nddd dd MMM yyyy" ); m_scaleDraw->setDateFormat( QwtDate::Day, "ddd dd MMM yyyy" ); m_scaleDraw->setDateFormat( QwtDate::Week, "Www yyyy" ); m_scaleDraw->setDateFormat( QwtDate::Month, "MMM yyyy" ); m_scaleDraw->setDateFormat( QwtDate::Year, "yyyy"); m_scaleEngine = new QwtDateScaleEngine( Qt::UTC ); //Axis setAxisTitle( QwtPlot::xBottom, QString( "Time" ) ); setAxisScaleDraw( QwtPlot::xBottom, m_scaleDraw ); setAxisScaleEngine( QwtPlot::xBottom, m_scaleEngine ); setAxisLabelRotation( QwtPlot::xBottom, -50.0 ); setAxisLabelAlignment( QwtPlot::xBottom, Qt::AlignLeft | Qt::AlignBottom ); setAxisTitle( QwtPlot::yLeft, QString( "Value" ) ); //Legend m_legend = new QwtLegend; insertLegend(m_legend); //Zoomer m_zoomer = new Zoomer( canvas() ); m_zoomer->setMousePattern( QwtEventPattern::MouseSelect2, Qt::RightButton, Qt::ControlModifier ); m_zoomer->setMousePattern( QwtEventPattern::MouseSelect3, Qt::RightButton ); //Panner m_panner = new QwtPlotPanner( canvas() ); m_panner->setMouseButton( Qt::MidButton ); resize(800,600); }
PlotWidget::PlotWidget(QWidget *parent) : QwtPlot(parent), ui(new Ui::PlotWidget) { ui->setupUi(this); // Setup plot stuff setAutoReplot(false); canvas()->setBorderRadius( 10 ); plotLayout()->setAlignCanvasToScales(true); QwtLegend *legend = new QwtLegend; legend->setItemMode(QwtLegend::CheckableItem); insertLegend(legend, QwtPlot::RightLegend); setAxisTitle(QwtPlot::xBottom, " Time [s]"); setAxisScaleDraw(QwtPlot::xBottom, new QwtScaleDraw()); setAxisAutoScale(QwtPlot::xBottom, false); setAxisScale(QwtPlot::xBottom, 0, Market::EXPERIMENT_RUNNING_TIME); setAxisLabelRotation(QwtPlot::xBottom, -50.0); setAxisLabelAlignment(QwtPlot::xBottom, Qt::AlignLeft | Qt::AlignBottom); setAxisTitle(QwtPlot::yLeft, " Price [$]"); setAxisScaleDraw(QwtPlot::yLeft, new QwtScaleDraw()); setAxisScale(QwtPlot::yLeft, 0, MAX_PRICE_PLOT); setAxisLabelRotation(QwtPlot::yLeft, -50.0); setAxisLabelAlignment(QwtPlot::yLeft, Qt::AlignLeft | Qt::AlignBottom); // Setup the data asset1Data = new CircularBuffer((Market::EXPERIMENT_RUNNING_TIME)/2 + 4); // Running time, /2 for data every 2 seconds, + a safety buffer asset2Data = new CircularBuffer((Market::EXPERIMENT_RUNNING_TIME)/2 + 4); timeData = new CircularBuffer((Market::EXPERIMENT_RUNNING_TIME)/2 + 4); asset1Curve = new QwtPlotCurve("Asset 1"); asset1Curve->setPen(QPen(Qt::red)); asset1Curve->attach(this); asset2Curve = new QwtPlotCurve("Asset 2"); asset2Curve->setPen(QPen(Qt::blue)); asset2Curve->attach(this); }
// Init X axis. void DataPlot::initAxisX() { //QwtText xTitle("System Uptime [h:m:s]"); //xTitle.setFont(QFont("Ubuntu", 10)); //setAxisTitle(QwtPlot::xBottom, xTitle); setAxisScaleDraw(QwtPlot::xBottom,new TimeScaleDraw(upTime())); setAxisScale(QwtPlot::xBottom, 0, PLOT_SIZE ); setAxisLabelRotation(QwtPlot::xBottom, -50.0); setAxisLabelAlignment(QwtPlot::xBottom, Qt::AlignLeft | Qt::AlignBottom); QwtScaleWidget *scaleWidget = axisWidget(QwtPlot::xBottom); const int fmh = QFontMetrics(scaleWidget->font()).height(); scaleWidget->setMinBorderDist(0, fmh / 2); }
Plot::Plot( QWidget *parent ): QwtPlot( parent ) { setTitle( "Trading Chart" ); QwtDateScaleDraw *scaleDraw = new DateScaleDraw( Qt::UTC ); QwtDateScaleEngine *scaleEngine = new QwtDateScaleEngine( Qt::UTC ); setAxisTitle( QwtPlot::xBottom, QString( "2010" ) ); setAxisScaleDraw( QwtPlot::xBottom, scaleDraw ); setAxisScaleEngine( QwtPlot::xBottom, scaleEngine ); setAxisLabelRotation( QwtPlot::xBottom, -50.0 ); setAxisLabelAlignment( QwtPlot::xBottom, Qt::AlignLeft | Qt::AlignBottom ); setAxisTitle( QwtPlot::yLeft, QString( "Price [EUR]" ) ); #if 0 QwtLegend *legend = new QwtLegend; legend->setDefaultItemMode( QwtLegendData::Checkable ); insertLegend( legend, QwtPlot::RightLegend ); #else Legend *legend = new Legend; insertLegend( legend, QwtPlot::RightLegend ); #endif populate(); // LeftButton for the zooming // MidButton for the panning // RightButton: zoom out by 1 // Ctrl+RighButton: zoom out to full size Zoomer* zoomer = new Zoomer( canvas() ); zoomer->setMousePattern( QwtEventPattern::MouseSelect2, Qt::RightButton, Qt::ControlModifier ); zoomer->setMousePattern( QwtEventPattern::MouseSelect3, Qt::RightButton ); QwtPlotPanner *panner = new QwtPlotPanner( canvas() ); panner->setMouseButton( Qt::MidButton ); connect( legend, SIGNAL( checked( QwtPlotItem *, bool, int ) ), SLOT( showItem( QwtPlotItem *, bool ) ) ); }
CpuPlot::CpuPlot( QWidget *parent ): QwtPlot( parent ), dataCount( 0 ) { setAutoReplot( false ); QwtPlotCanvas *canvas = new QwtPlotCanvas(); canvas->setBorderRadius( 10 ); setCanvas( canvas ); plotLayout()->setAlignCanvasToScales( true ); QwtLegend *legend = new QwtLegend; legend->setDefaultItemMode( QwtLegendData::Checkable ); insertLegend( legend, QwtPlot::RightLegend ); setAxisTitle( QwtPlot::xBottom, "System Uptime [h:m:s]" ); setAxisScaleDraw( QwtPlot::xBottom, new TimeScaleDraw( cpuStat.upTime() ) ); setAxisScale( QwtPlot::xBottom, 0, HISTORY ); //setAxisLabelRotation( QwtPlot::xBottom, -50.0 ); setAxisLabelRotation( QwtPlot::xBottom, 0.0 ); setAxisLabelAlignment( QwtPlot::xBottom, Qt::AlignLeft | Qt::AlignBottom ); /* In situations, when there is a label at the most right position of the scale, additional space is needed to display the overlapping part of the label would be taken by reducing the width of scale and canvas. To avoid this "jumping canvas" effect, we add a permanent margin. We don't need to do the same for the left border, because there is enough space for the overlapping label below the left scale. */ QwtScaleWidget *scaleWidget = axisWidget( QwtPlot::xBottom ); const int fmh = QFontMetrics( scaleWidget->font() ).height(); scaleWidget->setMinBorderDist( 0, fmh / 2 ); setAxisTitle( QwtPlot::yLeft, "Cpu Usage [%]" ); setAxisScale( QwtPlot::yLeft, 0, 100 ); //attach方法将元素关联到qwtplot空间上 Background *bg = new Background(); bg->attach( this ); CpuPieMarker *pie = new CpuPieMarker(); pie->attach( this ); CpuCurve *curve; curve = new CpuCurve( "System" ); curve->setColor( Qt::red ); curve->attach( this ); data[System].curve = curve; curve = new CpuCurve( "User" ); curve->setColor( Qt::blue ); curve->setZ( curve->z() - 1 ); curve->attach( this ); data[User].curve = curve; curve = new CpuCurve( "Total" ); curve->setColor( Qt::black ); curve->setZ( curve->z() - 2 ); curve->attach( this ); data[Total].curve = curve; curve = new CpuCurve( "Idle" ); curve->setColor( Qt::darkCyan ); curve->setZ( curve->z() - 3 ); curve->attach( this ); data[Idle].curve = curve; showCurve( data[System].curve, true ); showCurve( data[User].curve, true ); showCurve( data[Total].curve, false ); showCurve( data[Idle].curve, false ); for ( int i = 0; i < HISTORY; i++ ) timeData[HISTORY - 1 - i] = i; ( void )startTimer( 1000 ); // 1 second connect( legend, SIGNAL( checked( const QVariant &, bool, int ) ), SLOT( legendChecked( const QVariant &, bool ) ) ); }
void QcepPlot::init(QcepPlotSettingsWPtr settings) { m_PlotSettings = settings; setCanvasBackground(QColor(Qt::white)); m_Zoomer = new QcepPlotZoomer(canvas(), this); m_Zoomer -> setStateMachine(new QwtPickerDragRectMachine()); m_Zoomer -> setTrackerMode(QwtPicker::AlwaysOn); m_Zoomer -> setRubberBand(QwtPicker::RectRubberBand); m_Zoomer -> setMousePattern(QwtEventPattern::MouseSelect2, Qt::LeftButton, Qt::ControlModifier | Qt::ShiftModifier); m_Zoomer -> setMousePattern(QwtEventPattern::MouseSelect3, Qt::LeftButton, Qt::ControlModifier); m_Zoomer -> setEnabled(true); m_Legend = new QwtLegend(this); m_Legend -> setDefaultItemMode(QwtLegendData::Checkable); m_Panner = new QwtPlotPanner(canvas()); m_Panner -> setEnabled(true); m_Panner -> setMouseButton(Qt::MidButton); m_Panner -> setAxisEnabled(QwtPlot::yRight, false); m_Magnifier = new QwtPlotMagnifier(canvas()); m_Magnifier -> setEnabled(true); m_Magnifier -> setMouseButton(Qt::NoButton); m_Magnifier -> setAxisEnabled(QwtPlot::yRight, false); m_Measurer = new QcepPlotMeasurer(canvas(), this); m_Measurer -> setEnabled(false); setAxisLabelRotation(QwtPlot::yLeft, -90); setAxisLabelAlignment(QwtPlot::yLeft, Qt::AlignVCenter); autoScale(); QcepPlotSettingsPtr set(m_PlotSettings); if (set) { connect(set->prop_XAxisLog(), SIGNAL(valueChanged(bool,int)), this, SLOT(setXAxisLog(bool))); connect(set->prop_YAxisLog(), SIGNAL(valueChanged(bool,int)), this, SLOT(setYAxisLog(bool))); connect(set->prop_X2AxisLog(), SIGNAL(valueChanged(bool,int)), this, SLOT(setX2AxisLog(bool))); connect(set->prop_Y2AxisLog(), SIGNAL(valueChanged(bool,int)), this, SLOT(setY2AxisLog(bool))); setXAxisLog(set->get_XAxisLog()); setYAxisLog(set->get_YAxisLog()); setX2AxisLog(set->get_X2AxisLog()); setY2AxisLog(set->get_Y2AxisLog()); if (m_Legend) { int legendPos = set->get_LegendPosition(); if (legendPos >= 0) { insertLegend(m_Legend, (QwtPlot::LegendPosition) legendPos); } } } if (m_Legend) { connect(m_Legend, SIGNAL(clicked(const QVariant &,int)), this, SLOT(onLegendClicked(const QVariant&, int))); connect(m_Legend, SIGNAL(checked(const QVariant &,bool,int)), this, SLOT(onLegendChecked(const QVariant&, bool, int))); } }
RealtimePlot::RealtimePlot() : pwrCurve(NULL), showPowerState(Qt::Checked), showPow30sState(Qt::Checked), showHrState(Qt::Checked), showSpeedState(Qt::Checked), showCadState(Qt::Checked), showAltState(Qt::Checked), smooth(0) { setInstanceName("Realtime Plot"); //insertLegend(new QwtLegend(), QwtPlot::BottomLegend); pwr30Data = new Realtime30PwrData; pwrData = new RealtimePwrData; altPwrData = new RealtimePwrData; spdData = new RealtimeSpdData; hrData = new RealtimeHrData; cadData = new RealtimeCadData; // Setup the axis (of evil :-) setAxisTitle(yLeft, "Watts"); setAxisTitle(yRight, "Cadence / HR"); setAxisTitle(yRight2, "Speed"); setAxisTitle(xBottom, "Seconds Ago"); setAxisMaxMinor(xBottom, 0); setAxisMaxMinor(yLeft, 0); setAxisMaxMinor(yLeft2, 0); setAxisMaxMinor(yRight, 0); setAxisMaxMinor(yRight2, 0); QPalette pal; setAxisScale(yLeft, 0, 500); // watts pal.setColor(QPalette::WindowText, GColor(CPOWER)); pal.setColor(QPalette::Text, GColor(CPOWER)); axisWidget(QwtPlot::yLeft)->setPalette(pal); axisWidget(QwtPlot::yLeft)->scaleDraw()->setTickLength(QwtScaleDiv::MajorTick, 3); setAxisScale(yRight, 0, 230); // cadence / hr pal.setColor(QPalette::WindowText, GColor(CHEARTRATE)); pal.setColor(QPalette::Text, GColor(CHEARTRATE)); axisWidget(QwtPlot::yRight)->setPalette(pal); axisWidget(QwtPlot::yRight)->scaleDraw()->setTickLength(QwtScaleDiv::MajorTick, 3); setAxisScale(xBottom, MAXSAMPLES, 0, 15); // time ago pal.setColor(QPalette::WindowText, GColor(CPLOTMARKER)); pal.setColor(QPalette::Text, GColor(CPLOTMARKER)); axisWidget(QwtPlot::xBottom)->setPalette(pal); axisWidget(QwtPlot::xBottom)->scaleDraw()->setTickLength(QwtScaleDiv::MajorTick, 3); setAxisScale(yRight2, 0, 60); // speed km/h - 60kmh on a turbo is good going! pal.setColor(QPalette::WindowText, GColor(CSPEED)); pal.setColor(QPalette::Text, GColor(CSPEED)); axisWidget(QwtPlot::yRight2)->setPalette(pal); axisWidget(QwtPlot::yRight2)->scaleDraw()->setTickLength(QwtScaleDiv::MajorTick, 3); setAxisLabelRotation(yRight2,90); setAxisLabelAlignment(yRight2,Qt::AlignVCenter); enableAxis(xBottom, false); // very little value and some cpu overhead enableAxis(yLeft, true); enableAxis(yRight, true); enableAxis(yRight2, true); // 30s Power curve pwr30Curve = new QwtPlotCurve("30s Power"); pwr30Curve->setRenderHint(QwtPlotItem::RenderAntialiased); // too cpu intensive pwr30Curve->attach(this); pwr30Curve->setYAxis(QwtPlot::yLeft); // Power curve pwrCurve = new QwtPlotCurve("Power"); //pwrCurve->setRenderHint(QwtPlotItem::RenderAntialiased); pwrCurve->setData(pwrData); pwrCurve->attach(this); pwrCurve->setYAxis(QwtPlot::yLeft); altPwrCurve = new QwtPlotCurve("Alt Power"); //pwrCurve->setRenderHint(QwtPlotItem::RenderAntialiased); altPwrCurve->setData(altPwrData); altPwrCurve->attach(this); altPwrCurve->setYAxis(QwtPlot::yLeft); // HR hrCurve = new QwtPlotCurve("HeartRate"); //hrCurve->setRenderHint(QwtPlotItem::RenderAntialiased); hrCurve->setData(hrData); hrCurve->attach(this); hrCurve->setYAxis(QwtPlot::yRight); // Cadence cadCurve = new QwtPlotCurve("Cadence"); //cadCurve->setRenderHint(QwtPlotItem::RenderAntialiased); cadCurve->setData(cadData); cadCurve->attach(this); cadCurve->setYAxis(QwtPlot::yRight); // Speed spdCurve = new QwtPlotCurve("Speed"); //spdCurve->setRenderHint(QwtPlotItem::RenderAntialiased); spdCurve->setData(spdData); spdCurve->attach(this); spdCurve->setYAxis(QwtPlot::yRight2); // Load // lodCurve = new QwtPlotCurve("Load"); // //lodCurve->setRenderHint(QwtPlotItem::RenderAntialiased); // QPen lodpen = QPen(QColor(128,128,128)); // lodpen.setWidth(2.0); // lodCurve->setPen(lodpen); // QColor brush_color = QColor(124, 91, 31); // brush_color.setAlpha(64); // lodCurve->setBrush(brush_color); // fill below the line // lodCurve->setData(lodData); // lodCurve->attach(this); // lodCurve->setYAxis(QwtPlot::yLeft); canvas()->setFrameStyle(QFrame::NoFrame); configChanged(); // set colors }