【问题标题】:Multi touch rotation QT issue多点触控旋转QT问题
【发布时间】:2021-07-15 18:39:06
【问题描述】:

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

qreal TouchPoint::rotation() 常量

返回角度方向 这个接触点。返回值以度为单位,其中零( 默认)表示手指或令牌指向上方,否定 角度表示它向左旋转,正角度表示它是 向右旋转。大多数触摸屏不检测旋转,所以 零是最常见的值。

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

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

方向

类型:UINT32

指针方向,值在 0 到 359 之间,其中 0 表示与 x 轴对齐并指向从 左到右;增加的值表示旋转的度数 顺时针方向。

如果设备不报告方向,则此字段默认为 0。

         #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();

【问题讨论】:

  • 你为什么假设有任何旋转/方向信息?请说明您是如何与触摸输入进行交互的,以及您期望获得的方向。
  • 请查看 GetPointerTouchInfo 代码。它打印出 0 和 1 但 QT 只打印 0。

标签: c++ windows qt multi-touch


【解决方案1】:

此问题实际上是由当前 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。 他们已经确认这是一个错误。 没有办法,只能等微软 Windows 团队解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-15
    • 2015-05-20
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    相关资源
    最近更新 更多