SimCenterCommon
Common functionality used within different SimCenter projects
QCPAxisTickerDateTime Class Reference

Specialized axis ticker for calendar dates and times as axis ticks. More...

#include <qcustomplot.h>

Inheritance diagram for QCPAxisTickerDateTime:
Collaboration diagram for QCPAxisTickerDateTime:

Public Member Functions

 QCPAxisTickerDateTime ()
 
QString dateTimeFormat () const
 
Qt::TimeSpec dateTimeSpec () const
 
void setDateTimeFormat (const QString &format)
 
void setDateTimeSpec (Qt::TimeSpec spec)
 
void setTickOrigin (double origin)
 
void setTickOrigin (const QDateTime &origin)
 
- Public Member Functions inherited from QCPAxisTicker
 QCPAxisTicker ()
 
virtual ~QCPAxisTicker ()
 
TickStepStrategy tickStepStrategy () const
 
int tickCount () const
 
double tickOrigin () const
 
void setTickStepStrategy (TickStepStrategy strategy)
 
void setTickCount (int count)
 
void setTickOrigin (double origin)
 
virtual void generate (const QCPRange &range, const QLocale &locale, QChar formatChar, int precision, QVector< double > &ticks, QVector< double > *subTicks, QVector< QString > *tickLabels)
 

Static Public Member Functions

static QDateTime keyToDateTime (double key)
 
static double dateTimeToKey (const QDateTime dateTime)
 
static double dateTimeToKey (const QDate date)
 

Protected Types

enum  DateStrategy { dsNone, dsUniformTimeInDay, dsUniformDayInMonth }
 

Protected Member Functions

virtual double getTickStep (const QCPRange &range) Q_DECL_OVERRIDE
 
virtual int getSubTickCount (double tickStep) Q_DECL_OVERRIDE
 
virtual QString getTickLabel (double tick, const QLocale &locale, QChar formatChar, int precision) Q_DECL_OVERRIDE
 
virtual QVector< double > createTickVector (double tickStep, const QCPRange &range) Q_DECL_OVERRIDE
 
- Protected Member Functions inherited from QCPAxisTicker
virtual QVector< double > createSubTickVector (int subTickCount, const QVector< double > &ticks)
 
virtual QVector< QString > createLabelVector (const QVector< double > &ticks, const QLocale &locale, QChar formatChar, int precision)
 
void trimTicks (const QCPRange &range, QVector< double > &ticks, bool keepOneOutlier) const
 
double pickClosest (double target, const QVector< double > &candidates) const
 
double getMantissa (double input, double *magnitude=0) const
 
double cleanMantissa (double input) const
 

Protected Attributes

QString mDateTimeFormat
 
Qt::TimeSpec mDateTimeSpec
 
enum QCPAxisTickerDateTime::DateStrategy mDateStrategy
 
- Protected Attributes inherited from QCPAxisTicker
TickStepStrategy mTickStepStrategy
 
int mTickCount
 
double mTickOrigin
 

Additional Inherited Members

- Public Types inherited from QCPAxisTicker
enum  TickStepStrategy { tssReadability, tssMeetTickCount }
 

Detailed Description

Specialized axis ticker for calendar dates and times as axis ticks.

axisticker-datetime.png

This QCPAxisTicker subclass generates ticks that correspond to real calendar dates and times. The plot axis coordinate is interpreted as Unix Time, so seconds since Epoch (January 1, 1970, 00:00 UTC). This is also used for example by QDateTime in the toTime_t()/setTime_t() methods with a precision of one second. Since Qt 4.7, millisecond accuracy can be obtained from QDateTime by using QDateTime::fromMSecsSinceEpoch()/1000.0. The static methods dateTimeToKey and keyToDateTime conveniently perform this conversion achieving a precision of one millisecond on all Qt versions.

The format of the date/time display in the tick labels is controlled with setDateTimeFormat. If a different time spec (time zone) shall be used, see setDateTimeSpec.

This ticker produces unequal tick spacing in order to provide intuitive date and time-of-day ticks. For example, if the axis range spans a few years such that there is one tick per year, ticks will be positioned on 1. January of every year. This is intuitive but, due to leap years, will result in slightly unequal tick intervals (visually unnoticeable). The same can be seen in the image above: even though the number of days varies month by month, this ticker generates ticks on the same day of each month.

If you would like to change the date/time that is used as a (mathematical) starting date for the ticks, use the setTickOrigin(const QDateTime &origin) method overload, which takes a QDateTime. If you pass 15. July, 9:45 to this method, the yearly ticks will end up on 15. July at 9:45 of every year.

The ticker can be created and assigned to an axis like this:

Note
If you rather wish to display relative times in terms of days, hours, minutes, seconds and milliseconds, and are not interested in the intricacies of real calendar dates with months and (leap) years, have a look at QCPAxisTickerTime instead.

Definition at line 1572 of file qcustomplot.h.

Member Enumeration Documentation

Enumerator
dsNone 
dsUniformTimeInDay 
dsUniformDayInMonth 

Definition at line 1598 of file qcustomplot.h.

Constructor & Destructor Documentation

QCPAxisTickerDateTime::QCPAxisTickerDateTime ( )

Constructs the ticker and sets reasonable default values. Axis tickers are commonly created managed by a QSharedPointer, which then can be passed to QCPAxis::setTicker.

Definition at line 5775 of file qcustomplot.cpp.

Member Function Documentation

QVector< double > QCPAxisTickerDateTime::createTickVector ( double  tickStep,
const QCPRange range 
)
protectedvirtual

Reimplemented from QCPAxisTicker.

Definition at line 5933 of file qcustomplot.cpp.

QString QCPAxisTickerDateTime::dateTimeFormat ( ) const
inline

Definition at line 1578 of file qcustomplot.h.

Qt::TimeSpec QCPAxisTickerDateTime::dateTimeSpec ( ) const
inline

Definition at line 1579 of file qcustomplot.h.

double QCPAxisTickerDateTime::dateTimeToKey ( const QDateTime  dateTime)
static

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

A convenience method which turns a QDateTime object into a double value that corresponds to seconds since Epoch (1. Jan 1970, 00:00 UTC). This is the format used as axis coordinates by QCPAxisTickerDateTime.

The accuracy achieved by this method is one millisecond, irrespective of the used Qt version (it works around the lack of a QDateTime::toMSecsSinceEpoch in Qt 4.6)

See also
keyToDateTime

Definition at line 5998 of file qcustomplot.cpp.

double QCPAxisTickerDateTime::dateTimeToKey ( const QDate  date)
static

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

A convenience method which turns a QDate object into a double value that corresponds to seconds since Epoch (1. Jan 1970, 00:00 UTC). This is the format used as axis coordinates by QCPAxisTickerDateTime.

See also
keyToDateTime

Definition at line 6015 of file qcustomplot.cpp.

int QCPAxisTickerDateTime::getSubTickCount ( double  tickStep)
protectedvirtual

Reimplemented from QCPAxisTicker.

Definition at line 5884 of file qcustomplot.cpp.

QString QCPAxisTickerDateTime::getTickLabel ( double  tick,
const QLocale &  locale,
QChar  formatChar,
int  precision 
)
protectedvirtual

Reimplemented from QCPAxisTicker.

Definition at line 5919 of file qcustomplot.cpp.

double QCPAxisTickerDateTime::getTickStep ( const QCPRange range)
protectedvirtual

Reimplemented from QCPAxisTicker.

Definition at line 5850 of file qcustomplot.cpp.

QDateTime QCPAxisTickerDateTime::keyToDateTime ( double  key)
static

A convenience method which turns key (in seconds since Epoch 1. Jan 1970, 00:00 UTC) into a QDateTime object. This can be used to turn axis coordinates to actual QDateTimes.

The accuracy achieved by this method is one millisecond, irrespective of the used Qt version (it works around the lack of a QDateTime::fromMSecsSinceEpoch in Qt 4.6)

See also
dateTimeToKey

Definition at line 5978 of file qcustomplot.cpp.

void QCPAxisTickerDateTime::setDateTimeFormat ( const QString &  format)

Sets the format in which dates and times are displayed as tick labels. For details about the format string, see the documentation of QDateTime::toString().

Newlines can be inserted with "\n".

See also
setDateTimeSpec

Definition at line 5791 of file qcustomplot.cpp.

void QCPAxisTickerDateTime::setDateTimeSpec ( Qt::TimeSpec  spec)

Sets the time spec that is used for creating the tick labels from corresponding dates/times.

The default value of QDateTime objects (and also QCPAxisTickerDateTime) is Qt::LocalTime. However, if the date time values passed to QCustomPlot (e.g. in the form of axis ranges or keys of a plottable) are given in the UTC spec, set spec to Qt::UTC to get the correct axis labels.

See also
setDateTimeFormat

Definition at line 5806 of file qcustomplot.cpp.

void QCPAxisTickerDateTime::setTickOrigin ( double  origin)

Sets the tick origin (see QCPAxisTicker::setTickOrigin) in seconds since Epoch (1. Jan 1970, 00:00 UTC). For the date time ticker it might be more intuitive to use the overload which directly takes a QDateTime, see setTickOrigin(const QDateTime &origin).

This is useful to define the month/day/time recurring at greater tick interval steps. For example, If you pass 15. July, 9:45 to this method and the tick interval happens to be one tick per year, the ticks will end up on 15. July at 9:45 of every year.

Definition at line 5820 of file qcustomplot.cpp.

void QCPAxisTickerDateTime::setTickOrigin ( const QDateTime &  origin)

Sets the tick origin (see QCPAxisTicker::setTickOrigin) as a QDateTime origin.

This is useful to define the month/day/time recurring at greater tick interval steps. For example, If you pass 15. July, 9:45 to this method and the tick interval happens to be one tick per year, the ticks will end up on 15. July at 9:45 of every year.

Definition at line 5832 of file qcustomplot.cpp.

Member Data Documentation

enum QCPAxisTickerDateTime::DateStrategy QCPAxisTickerDateTime::mDateStrategy
protected
QString QCPAxisTickerDateTime::mDateTimeFormat
protected

Definition at line 1594 of file qcustomplot.h.

Qt::TimeSpec QCPAxisTickerDateTime::mDateTimeSpec
protected

Definition at line 1595 of file qcustomplot.h.


The documentation for this class was generated from the following files: