    QChartView::mouseReleaseEvent(event);
  }
  
  
  // LineMarker
  
  void LineMarker::setX(double x) {
    if (x != x_pos) {
      x_pos = x;
      update();
 
</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 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 // 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);
}
  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());
    QChartView::mouseReleaseEvent(event);
  }
  
  
  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());
  
  void LineMarker::setX(double x) {
    if (x != x_pos) {
      x_pos = x;
      update();
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