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

194 篇文章 103 订阅

解决使用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是不接受的所有触摸事件都将转换为鼠标左键事件。默认情况下启用此属性。
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iOS 将iframe嵌入网页的兼容问题主要涉及以下两个方面: 1. iOS 的 Safari 浏览器对于iframe中嵌入的内容的加载和显示可能存在一些限制。首先,由于安全考虑,iOS的Safari浏览器在加载iframe中的网页时会采取一些措施,比如禁止执行动态脚本、阻止下载非安全资源等,这可能导致一些功能无法正常使用或显示异常。其次,iOS Safari 对于iframe中的内容的尺寸自适应支持可能有限,如果父页面和嵌入的页面在尺寸上存在不匹配,可能会导致显示效果不理想。 2. iOS设备上的触摸操作也可能影响到iframe的使用体验。由于iOS设备主要采用触控屏幕,与桌面设备的鼠标操作存在一些差异,因此在iframe中的交互元素(比如按钮、链接等)可能需要专门适配和处理触摸事件,以实现良好的用户体验。 为了解决iOS iframe兼容问题,可以考虑以下几点: 1. 确保iframe中嵌入的内容是符合iOS Safari浏览器要求的,避免使用动态脚本、非安全资源等。 2. 在设计父页面和嵌入页面时,尽量保持尺寸的一致,以避免显示问题。可以通过CSS样式或JavaScript来调整和适配尺寸。 3. 针对iOS设备的触摸操作特,对iframe中的交互元素进行专门的适配和处理,确保用户可以正常操作和使用。 综上所述,iOS Safari浏览器中iframe的兼容问题主要包括内容加载和显示限制以及触摸操作的适配。通过遵循浏览器的规范并针对iOS设备进行适配,可以解决这些问题,提升用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值