Run the attached sample.
Swipe the finger vertically and release it.
You should get a log similar to this, where we get two TouchBegin events in the beginning...
The first one seems to be wrong. It is actually because the actual system event is WM_POINTERENTER. And when QWindowsPointerHandler::translateTouchEvent() delivers the touch event it deduces the type of touch event by examining the state of the touchpoints. So the touch event will be ultimately be delivered as TouchBegin.
Next, it will try to deliver the mouse event, but the call to getMouseEventInfo() results in that eventType becomes QEvent::None. That type is passed on to QWindowSystemInterface::handleMouseEvent(), and it will eventually end up in QGuiApplicationPrivate::processMouseEvent(), and deduce that the event should be of type QEvent::MouseMove. This is why the first two events are TouchBegin and MouseMove. I believe they should not be there.
Maybe the call to translateTouchEvent() in QWindowsPointerHandler::translatePointerEvent() should be surrounded by check on the msg.message instead of just checking the pointerType. It seems that translateTouchEvent() should only be responsible for sending TouchBegin TouchUpdate TouchEnd (or MousePress, MouseMove, MouseRelease) events.