c++ - 在哪里实现容忍度来决定何时在 Qt 中检测触摸屏按下事件和移动事件?

标签 c++ qt touch mouse

我有兴趣将使用基于鼠标的界面的应用程序移植到基于触摸屏的界面,并且我想知道当“大且摇摆不定”的指尖用户使用我的应用程序时如何最好地避免误操作

如果用户触摸某个位置并且他/她/它的脉搏或不耐烦导致指尖围绕某些像素摆动,我的应用程序不应将其解释为 QEvent::MouseMove 并导致滚动例如下面的列表。

似乎有两个类可以执行类似按下的事件,即QTouchEventQMouseEvent

  • 与可靠地检测用户意图的上述问题有什么区别? QTouchEvent 是否为我解决了这个问题?

  • 我是否需要为 QTouchEvent 添加事件处理程序,与 QMouseEvent 并行(以便向后兼容鼠标用户)?

我想在每个小部件中再次实现这种容忍度并不是一个好主意,但是应该有一些全局实例可以使它起作用,例如QApplication 或直接 X11。

最佳答案

尝试使用 QApplication::startDragDistance()。这是应用程序范围内可访问的。如果这只需要在您的应用程序的一部分中检查(例如列表中的小尺寸元素),您仍然可以使用自定义距离。然后重新实现 QWidget::mouseMoveEvent(QMouseEvent *event) 并包含(来自文档):

if ((startPos - currentPos).manhattanLength() >= QApplication::startDragDistance())
     startTheDrag();

关于c++ - 在哪里实现容忍度来决定何时在 Qt 中检测触摸屏按下事件和移动事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23042479/

相关文章:

c++ - Stringstream - 将对象转换为字符串

qt - 如何使用 QDesktopServices::openUrl 与 'file:' URL 包含 '#' ?

c++ - 当焦点出现在 QToolButton 上时如何调整 QToolButton 的大小

iphone - subview 内的 touchesMoved 检测

c# - 如何在 WPF 中使用捏合功能同时启用滚动和缩放?

c++ - 有什么办法可以暂时停止布局重新计算?

c++ - 关于工厂模式的问题

c++ - 在 linux 上部署 Qt5.10 App 时出错

c++ - 在注册类本身中调用 qmlRegisterType()

模拟触摸输入的 Android 应用程序