多点触控旋转QT问题

Multi touch rotation QT issue

我目前正在尝试在 Windows 中当用户触摸特定对话框时捕获多点触摸输入的方位角(手指的旋转)。 我正在使用 QT C++ 框架。 我正在使用 Surface Laptop 3 测试所有内容。 问题是当我尝试使用 QT 时,我得到的值总是 0: 根据 QT 文档:

qreal TouchPoint::rotation() const

Returns the angular orientation of this touch point. The return value is in degrees, where zero (the default) indicates the finger or token is pointing upwards, a negative angle means it's rotated to the left, and a positive angle means it's rotated to the right. Most touchscreens do not detect rotation, so zero is the most common value.

//....
for (auto const& elem : touch.touchPoints()) {
        std::cout <<"Rotation:" <<elem.rotation();
        //.....

尝试检查如何直接在本机捕获此数据(没有 QT 框架)以及当我按下屏幕时 我得到 0 或 1 的值 . 最初预计会得到更多的随机值。 根据文档:

orientation

Type: UINT32

A pointer orientation, with a value between 0 and 359, where 0 indicates a touch pointer aligned with the x-axis and pointing from left to right; increasing values indicate degrees of rotation in the clockwise direction.

This field defaults to 0 if the device does not report orientation.

         #include <winuser.h>
          //......
         case PT_TOUCH:
              POINTER_TOUCH_INFO touchInfo;
              GetPointerTouchInfo(pointerId, &touchInfo);
              std::cout << "----------------------------------------" << std::endl; 
              std::cout << "Orientation" << touchInfo.orientation<<std::endl;

以上我假设方向通常与方向完全相同。

  1. 知道为什么我在 QT 中总是得到 0 吗? (这是一个错误吗?)
  2. 我的推测是否正确? touchInfo.orientation 类似于 rotation();

该问题实际上是由当前 Windows 版本中的 2 个错误引起的。

1.Windows 生成了错误的值:

std::cout << "Orientation" << touchInfo.orientation<<std::endl; //is 0 or 1 because of Windows internal driver issues.

2.QT

for (auto const& elem : touch.touchPoints()) {
        std::cout <<"Rotation:" <<elem.rotation();
        //.....

QT 在内部使用上面 touchInfo.orientation 提供的值。 因为这个问题是由 Windows 产生的,因此 QT 也产生了错误的值。

我已经把BUG提交给微软了。 他们已经确认这是一个错误。 没有解决办法,只能等待 Microsoft Windows 团队解决这个问题。