    // TODO: right-click to reset zoom
    QChartView::mouseReleaseEvent(event);
  }
  
  void ChartView::mouseMoveEvent(QMouseEvent *ev) {
    auto rubber = findChild<QRubberBand *>();
 
</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 // LineMarker
 </s> add   if (show) {
    const auto plot_area = chart()->plotArea();
    float x = std::clamp((float)ev->pos().x(), (float)plot_area.left(), (float)plot_area.right());
    track_line->setLine(x, plot_area.top(), x, plot_area.bottom()); </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 *>()) {
  line_marker->setVisible(true);
    // TODO: right-click to reset zoom
    QChartView::mouseReleaseEvent(event);
  line_marker->setVisible(true);
  }
  
  void ChartView::mouseMoveEvent(QMouseEvent *ev) {
    auto rubber = findChild<QRubberBand *>();
keep add keep keep keep keep
 Cabana: display the (x,y) values while MouseMove on the chart (#26064) 
tools/cabana/chartswidget.cc