我正在使用 Qt/QML 为 Windows 7 开发触摸应用程序。最终用户设备具有 Windows 7 的原生触摸行为,即:触摸屏幕时,最后触摸的点上会出现一个点,当结束物理触摸时,Windows 将该点放在现在触摸的点上并运行在点击事件中。
与从标准 Windows 鼠标使用中知道的行为相比,这会导致不同的行为,例如单击某个按钮:鼠标用户会期望当鼠标按钮按下时按钮将颜色更改为按下的颜色,而当鼠标按钮抬起时颜色再次更改为默认颜色。
在我的应用程序中,我想要一种自定义的触摸反馈方式:应该使用更改的按钮颜色标记当前正在触摸的内容,在实际物理触摸开始时模仿“鼠标下降”并模仿“鼠标上升”当实际的 body 接触结束时。
我的应用程序将全屏运行,因此实际的可能性是在应用程序启动时更改系统的行为,并在应用程序结束时将其更改回默认值。
这种行为实际上与标准行为相同,例如我知道的所有 Android 设备。
我搜索了所有 MouseArea 和 MultiPointTouchArea 元素,试图找到一种方法,使点击 react 行为与标准行为不同。然而,我什至没有找到一种方法来捕捉实际触摸的开始......我想在触摸开始时发生的所有事情实际上都在触摸结束时发生。
编辑:
如果我使用 QML 按钮或 mousearea 加上 MouseArea.pressed 属性并不重要:在手指离开触摸之前不会“按下”任何东西,甚至调用 onClicked() 。
可能相关:
Adobe AIR: touch screen doesn't trigger mouse down event correctly - 但我没有找到从原生 Qt 应用程序访问 Multitouch.inputMode(在第一个回复中提到)等功能的方法。
如何为我的应用程序实现所描述的行为?
最佳答案
此问题的解决方案是禁用应用程序的“按住”。这是可以在系统范围内使用...
控制面板 -> 笔和触摸 -> 触摸 -> 按住 -> 设置 -> 取消选中“启用按住以右键单击”
我在 native 代码中找到的唯一解决方案可以在这里找到:
http://msdn.microsoft.com/en-us/library/ms812373.aspx
我检查过这至少仍然适用于 Windows 7。为了让它适用于 QML,我在 QQmlApplicationEngine::rootObjects() 中搜索了 QWindow* 并将其 winId 用作 HWND。使用该 HWND,我从 app.exec() 之前的链接调用了 TogglePressAndHold 函数。
关于qt - 使用 Qt/QML 应用程序在 Windows 7 中自定义触摸行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27445630/