Although the app was using contentsMouseMoveEvent, the cursor was changing shape when it crossed the QCanvasView frame going from the outside into the widget. I never did figure out how or why that happened. So I thought that if I could capture the mouse move for the whole view (not just the viewport), I could explicitly change the cursor to the PointingHandCursor when it was outside of the viewport area (in other words, when it was over the scroll bars). Using mouseMoveEvent instead of contentsMouseMoveEvent did the trick. Thanks for the tip.