  
  void ChartView::mouseMoveEvent(QMouseEvent *ev) {
    // Scrubbing
    if (is_scrubbing && QApplication::keyboardModifiers().testFlag(Qt::ShiftModifier)) {
      double t = chart()->mapToValue({(double)ev->x(), (double)ev->y()}).x();
      // Prevent seeking past the end of the route
      t = std::clamp(t, 0., can->totalSeconds());
      can->seekTo(t);
      return;
    }
  
    auto rubber = findChild<QRubberBand *>();
    bool is_zooming = rubber && rubber->isVisible();
 
</s> remove   emit updated();
  emit msgsReceived(&can_msgs);
 </s> add   QTimer::singleShot(0, [this]() {
    emit updated();
    emit msgsReceived(&can_msgs);
  }); </s> remove 
 </s> add #include <QTimer>
    if (chart()->plotArea().contains(ev->pos())) {
      double t = chart()->mapToValue(ev->pos()).x();
      // Prevent seeking past the end of the route
      t = std::clamp(t, 0., can->totalSeconds());
      can->seekTo(t);
    }
  
  void ChartView::mouseMoveEvent(QMouseEvent *ev) {
    // Scrubbing
    if (is_scrubbing && QApplication::keyboardModifiers().testFlag(Qt::ShiftModifier)) {
    if (chart()->plotArea().contains(ev->pos())) {
      double t = chart()->mapToValue(ev->pos()).x();
      // Prevent seeking past the end of the route
      t = std::clamp(t, 0., can->totalSeconds());
      can->seekTo(t);
    }
    if (chart()->plotArea().contains(ev->pos())) {
      double t = chart()->mapToValue(ev->pos()).x();
      // Prevent seeking past the end of the route
      t = std::clamp(t, 0., can->totalSeconds());
      can->seekTo(t);
    }
    if (chart()->plotArea().contains(ev->pos())) {
      double t = chart()->mapToValue(ev->pos()).x();
      // Prevent seeking past the end of the route
      t = std::clamp(t, 0., can->totalSeconds());
      can->seekTo(t);
    }
    if (chart()->plotArea().contains(ev->pos())) {
      double t = chart()->mapToValue(ev->pos()).x();
      // Prevent seeking past the end of the route
      t = std::clamp(t, 0., can->totalSeconds());
      can->seekTo(t);
    }
      return;
    }
  
    auto rubber = findChild<QRubberBand *>();
    bool is_zooming = rubber && rubber->isVisible();
keep keep keep keep replace replace replace replace keep keep keep keep keep
 cabana: fix hang on scrubbing in zommed chart (#27568) 
tools/cabana/chartswidget.cc