多点触控旋转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;
以上我假设方向通常与方向完全相同。
- 知道为什么我在 QT 中总是得到 0 吗? (这是一个错误吗?)
- 我的推测是否正确? 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 团队解决这个问题。
我目前正在尝试在 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;
以上我假设方向通常与方向完全相同。
- 知道为什么我在 QT 中总是得到 0 吗? (这是一个错误吗?)
- 我的推测是否正确? 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 团队解决这个问题。