首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决一个触摸屏兼容性问题

解决一个触摸屏兼容性问题

作者头像
Qt君
发布2019-10-24 17:06:19
1.2K0
发布2019-10-24 17:06:19
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

解决使用win10系统触摸屏触控正常,而在win7系统中却触摸不了的问题。

问题还原
  • 下列代码中win10触摸板能正常工作,但在win7系统中却触摸不了。
/* main.cpp */
QQuickWidget view;
view.setSource(QUrl("qrc:Main.qml"));
view.show();

/* Main.qml */
Item {
	MouseArea {
		anchors.fill: parent
		onClicked: console.log(">>>>")
	}
}
问题分析

  通过拦截Qt的事件队列,可以看到win10系统中的触摸事件如下:

QQuickMouseArea -> QEvent::TouchBegin
...
QQuickMouseArea -> QEvent::TouchEnd
...
QQuickWidget -> QEvent::MouseButtonPress
QQuickWindow -> QEvent::MouseButtonPress
QQuickMouseArea -> QEvent::MouseButtonPress

  win7中的触摸事件:

QQuickMouseArea -> QEvent::TouchBegin
...
QQuickMouseArea -> QEvent::TouchEnd
...
QQuickWidget -> QEvent::MouseButtonPress
QQuickWindow -> QEvent::MouseButtonPress

  通过触摸事件信息对比win10与win7信息中它们都触发了触摸事件,由于Qt默认将触摸事件定向到鼠标事件,但win7最后却没有触发QEvent::MouseButtonPress导致显示触摸没反应的问题。

问题解决
  • 为QWidget的派生类设置Qt::WA_AcceptTouchEvents属性,如:
view->setAttribute(Qt::WA_AcceptTouchEvents);
  • 由于QTouchEvent和QMouseEvent事件独立。想要它们合成事件可以设置QCoreApplication的setAttribute的应用标记Qt::AA_SynthesizeTouchForUnhandledMouseEventsQt::AA_SynthesizeMouseForUnhandledTouchEvents用于启用或禁用触摸事件到鼠标事件或鼠标事件到触摸事件的自动合成。
  • 其中,Qt::AA_SynthesizeMouseForUnhandledTouchEvents是不接受的所有触摸事件都将转换为鼠标左键事件。默认情况下启用此属性。
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-10-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题还原
  • 问题分析
  • 问题解决
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档