    }
    chart_layout->addWidget(chart_view);
    chart_layout->addStretch();
  
    stacked->addWidget(chart_widget);
    line_marker = new LineMarker(this);
    stacked->addWidget(line_marker);
    line_marker->setAttribute(Qt::WA_TransparentForMouseEvents, true);
    line_marker->raise();
  
    setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
    QObject::connect(can, &CANMessages::updated, this, &ChartWidget::updateState);
    QObject::connect(can, &CANMessages::rangeChanged, this, &ChartWidget::rangeChanged);
    QObject::connect(can, &CANMessages::eventsMerged, this, &ChartWidget::updateSeries);
    QObject::connect(dynamic_cast<QValueAxis *>(chart->axisX()), &QValueAxis::rangeChanged, can, &CANMessages::setRange);
    QObject::connect(dbc(), &DBCManager::signalUpdated, [this](const QString &msg_id, const QString &sig_name) {
      if (this->id == msg_id && this->sig_name == sig_name)
        updateSeries();
    });
 
</s> remove   chart_layout->addWidget(chart_view);
  chart_layout->addStretch();
 </s> add  </s> remove // ChartView
 </s> add void ChartView::enterEvent(QEvent *event) {
  track_line->setVisible(true);
  value_text->setVisible(true);
  QChartView::enterEvent(event);
}

void ChartView::leaveEvent(QEvent *event) {
  track_line->setVisible(false);
  value_text->setVisible(false);
  QChartView::leaveEvent(event);
} </s> remove void ChartWidget::updateAxisY() {
  const auto axis_x = dynamic_cast<QValueAxis *>(chart_view->chart()->axisX());
  const auto axis_y = dynamic_cast<QValueAxis *>(chart_view->chart()->axisY());
 </s> add void ChartView::updateAxisY() {
  const auto axis_x = dynamic_cast<QValueAxis *>(chart()->axisX());
  const auto axis_y = dynamic_cast<QValueAxis *>(chart()->axisY()); </s> remove   chart_view = new ChartView(chart);
  chart_view->setFixedHeight(300);
  chart_view->setRenderHint(QPainter::Antialiasing);
  chart_view->setRubberBand(QChartView::HorizontalRubberBand);
  if (auto rubber = chart_view->findChild<QRubberBand *>()) {
 </s> add   track_line = new QGraphicsLineItem(chart);
  track_line->setPen(QPen(Qt::gray, 1, Qt::DashLine));
  value_text = new QGraphicsSimpleTextItem(chart);
  value_text->setBrush(Qt::gray);
  line_marker = new QGraphicsLineItem(chart);
  line_marker->setPen(QPen(Qt::black, 2));

  setChart(chart);

  setRenderHint(QPainter::Antialiasing);
  setRubberBand(QChartView::HorizontalRubberBand);
  if (auto rubber = findChild<QRubberBand *>()) {
  QObject::connect(can, &CANMessages::updated, this, &ChartView::updateState);
  QObject::connect(can, &CANMessages::rangeChanged, this, &ChartView::rangeChanged);
  QObject::connect(can, &CANMessages::eventsMerged, this, &ChartView::updateSeries);
    }
    chart_layout->addWidget(chart_view);
    chart_layout->addStretch();
  
  QObject::connect(can, &CANMessages::updated, this, &ChartView::updateState);
  QObject::connect(can, &CANMessages::rangeChanged, this, &ChartView::rangeChanged);
  QObject::connect(can, &CANMessages::eventsMerged, this, &ChartView::updateSeries);
  QObject::connect(can, &CANMessages::updated, this, &ChartView::updateState);
  QObject::connect(can, &CANMessages::rangeChanged, this, &ChartView::rangeChanged);
  QObject::connect(can, &CANMessages::eventsMerged, this, &ChartView::updateSeries);
  QObject::connect(can, &CANMessages::updated, this, &ChartView::updateState);
  QObject::connect(can, &CANMessages::rangeChanged, this, &ChartView::rangeChanged);
  QObject::connect(can, &CANMessages::eventsMerged, this, &ChartView::updateSeries);
  QObject::connect(can, &CANMessages::updated, this, &ChartView::updateState);
  QObject::connect(can, &CANMessages::rangeChanged, this, &ChartView::rangeChanged);
  QObject::connect(can, &CANMessages::eventsMerged, this, &ChartView::updateSeries);
  QObject::connect(can, &CANMessages::updated, this, &ChartView::updateState);
  QObject::connect(can, &CANMessages::rangeChanged, this, &ChartView::rangeChanged);
  QObject::connect(can, &CANMessages::eventsMerged, this, &ChartView::updateSeries);
  QObject::connect(can, &CANMessages::updated, this, &ChartView::updateState);
  QObject::connect(can, &CANMessages::rangeChanged, this, &ChartView::rangeChanged);
  QObject::connect(can, &CANMessages::eventsMerged, this, &ChartView::updateSeries);
  QObject::connect(can, &CANMessages::updated, this, &ChartView::updateState);
  QObject::connect(can, &CANMessages::rangeChanged, this, &ChartView::rangeChanged);
  QObject::connect(can, &CANMessages::eventsMerged, this, &ChartView::updateSeries);
  QObject::connect(can, &CANMessages::updated, this, &ChartView::updateState);
  QObject::connect(can, &CANMessages::rangeChanged, this, &ChartView::rangeChanged);
  QObject::connect(can, &CANMessages::eventsMerged, this, &ChartView::updateSeries);
  QObject::connect(can, &CANMessages::updated, this, &ChartView::updateState);
  QObject::connect(can, &CANMessages::rangeChanged, this, &ChartView::rangeChanged);
  QObject::connect(can, &CANMessages::eventsMerged, this, &ChartView::updateSeries);
  QObject::connect(can, &CANMessages::updated, this, &ChartView::updateState);
  QObject::connect(can, &CANMessages::rangeChanged, this, &ChartView::rangeChanged);
  QObject::connect(can, &CANMessages::eventsMerged, this, &ChartView::updateSeries);
    QObject::connect(dynamic_cast<QValueAxis *>(chart->axisX()), &QValueAxis::rangeChanged, can, &CANMessages::setRange);
    QObject::connect(dbc(), &DBCManager::signalUpdated, [this](const QString &msg_id, const QString &sig_name) {
      if (this->id == msg_id && this->sig_name == sig_name)
        updateSeries();
    });
keep keep keep keep replace replace replace replace replace replace replace replace replace replace keep keep keep keep keep
 Cabana: display the (x,y) values while MouseMove on the chart (#26064) 
tools/cabana/chartswidget.cc