C++ (Qt)#include <QApplication>#include <QMainWindow>#include <QChartView>#include <QChart>#include <QLineSeries>#include <QValueAxis>#include <QDateTimeAxis>#include <QDateTime>#include <QGraphicsSceneMouseEvent> using namespace QtCharts; const int SecsInHour = 3600; class MyChart : public QChart{protected: void mousePressEvent(QGraphicsSceneMouseEvent *event) override { event->accept(); } void mouseMoveEvent(QGraphicsSceneMouseEvent *event) override { if (event->buttons().testFlag( Qt::LeftButton) ) { #if 1 scroll(event->lastPos().x() - event->pos().x(), 0); #else qint64 secs = SecsInHour / 2; if (event->pos().x() > event->lastPos().x()) secs = -secs; QDateTimeAxis * axis_x = qobject_cast<QDateTimeAxis *>(axisX()); QDateTime current = axis_x->min(); current = current.addSecs( secs ); axis_x->setRange(current, current.addDays(1)); #endif } }}; int main(int argc, char *argv[]){ QApplication application(argc, argv); QDateTime current(QDate::currentDate(), QTime()); QLineSeries *series = new QLineSeries; series->append(current.addSecs(SecsInHour * 1 ).toMSecsSinceEpoch() , 25); series->append(current.addSecs(SecsInHour * 2 ).toMSecsSinceEpoch() , 75); series->append(current.addSecs(SecsInHour * 3 ).toMSecsSinceEpoch() , 25); QDateTimeAxis *axisX = new QDateTimeAxis(); axisX->setRange(current, current.addDays(1)); axisX->setTickCount(12); axisX->setFormat("dd.MM hh:00"); QValueAxis *axisY = new QValueAxis(); axisY->setRange(0, 100); MyChart *chart = new MyChart(); chart->legend()->hide(); chart->addSeries(series); chart->setAxisX(axisX, series); chart->setAxisY(axisY, series); QChartView *chart_view = new QChartView(chart); QMainWindow main_window; main_window.setCentralWidget(chart_view); main_window.resize(1000, 600); main_window.show(); return application.exec();}