QwtPanner: while it is active (isVisible() == true), it must handle FocusOut event to ends up panning. Consider context menu invokation with ContextMenu key while panning - context menu grabs the focus and subsequent mouse release event (if user picks some item from the menu), so when returning back to the plot's canvas widget there will be inconsistent state due to the panner thinks it still active, while there is no longer mouse button held. We also may have Qt::ClosedHandCursor indicating panning (if we applied QwtPanner::setCursor(Qt::ClosedHandCursor)), but we no longer have actual panning (no MouseMove events occur due to no mouse button held).

I think the same is applicable to QwtPlotZoomer.

QwtPanner: while it activates at certain mouse button press and certain keyboard modifiers (QwtPanner::setMouseButton()), it ends at any mouse button release and any keyboard modifiers. IMHO, for sake of simmetry (and simplicity) ending combination must be the same as beginning.