qwt отображение по оси абсцисс даты времени
В .log пишу состояние сенсора. Запись произвожу раз в час, то есть дискрет между точками равен 60 минутам. Запись циклическая с периодом 1 год. Вот и возникает вопрос как можно в qwt по оси абсцисс отобразить время вместо точек дискретизации? Для удобства чтения данных.
Ответы (1 шт):
Автор решения: Fat-Zer
→ Ссылка
Начиная с Qwt 6.1 можно использовать QwtDateScaleDraw и, по необходимости, QwtDateScaleEngine.
Пример на основе simpleplot:
#include <cstdlib>
#include <qapplication.h>
#include <qwt_plot.h>
#include <qwt_plot_curve.h>
#include <qwt_plot_grid.h>
#include <qwt_symbol.h>
#include <qwt_legend.h>
#include <QDateTime>
#include <qwt_date.h>
#include <qwt_date_scale_engine.h>
#include <qwt_date_scale_draw.h>
int main( int argc, char **argv )
{
QApplication a( argc, argv );
QwtPlot plot;
plot.setTitle( "Plot Demo" );
plot.setCanvasBackground( Qt::white );
plot.setAxisScale( QwtPlot::yLeft, 0.0, 10.0 );
plot.insertLegend( new QwtLegend() );
plot.setAxisScaleDraw( QwtPlot::xBottom, new QwtDateScaleDraw);
plot.setAxisScaleEngine( QwtPlot::xBottom, new QwtDateScaleEngine);
QwtPlotGrid *grid = new QwtPlotGrid();
grid->attach( &plot );
QwtPlotCurve *curve = new QwtPlotCurve();
curve->setTitle( "Some Points" );
curve->setPen( Qt::blue, 4 );
curve->setRenderHint( QwtPlotItem::RenderAntialiased, true );
QwtSymbol *symbol = new QwtSymbol( QwtSymbol::Ellipse,
QBrush( Qt::yellow ), QPen( Qt::red, 2 ), QSize( 8, 8 ) );
curve->setSymbol( symbol );
QPolygonF points;
for (int i=0; i<6; i++) {
points << QPointF( QwtDate::toDouble(QDateTime(QDate::currentDate().addDays(i))),
rand()*10.0/RAND_MAX );
}
curve->setSamples( points );
curve->attach( &plot );
plot.resize( 800, 600 );
plot.show();
return a.exec();
}
Также смотри пример stockchart.
