    }
    QLineSeries *series = (QLineSeries *)chart_view->chart()->series()[0];
    series->replace(vals);
    auto [begin, end] = can->range();
    chart_view->chart()->axisX()->setRange(begin, end);
    updateAxisY();
  }
  
  void ChartWidget::rangeChanged(qreal min, qreal max) {
    auto axis_x = dynamic_cast<QValueAxis *>(chart_view->chart()->axisX());
 
</s> remove   QLineSeries *series = (QLineSeries *)chart_view->chart()->series()[0];
 </s> add   QLineSeries *series = (QLineSeries *)chart()->series()[0]; </s> remove void ChartWidget::rangeChanged(qreal min, qreal max) {
  auto axis_x = dynamic_cast<QValueAxis *>(chart_view->chart()->axisX());
 </s> add void ChartView::rangeChanged(qreal min, qreal max) {
  auto axis_x = dynamic_cast<QValueAxis *>(chart()->axisX()); </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 // 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);
}
  chart()->axisX()->setRange(begin, end);
    }
    QLineSeries *series = (QLineSeries *)chart_view->chart()->series()[0];
    series->replace(vals);
    auto [begin, end] = can->range();
  chart()->axisX()->setRange(begin, end);
    updateAxisY();
  }
  
  void ChartWidget::rangeChanged(qreal min, qreal max) {
    auto axis_x = dynamic_cast<QValueAxis *>(chart_view->chart()->axisX());
keep keep keep keep replace keep keep keep keep keep
 Cabana: display the (x,y) values while MouseMove on the chart (#26064) 
tools/cabana/chartswidget.cc