Qt QML中如何让SwipeView内的Dial优先响应触摸输入?
Qt SwipeView与Dial触摸手势优先级问题
背景
我使用了一个多页面的SwipeView,适配2.1英寸的小型圆形屏幕,交互逻辑为左右滑动切换页面。每个页面仅包含少量交互UI元素,多数页面只有一个Dial(部分页面底部中央会附带按钮)。
问题
采用触摸输入(目标操作方式)时,Dial内的水平拖动大多被识别为底层SwipeView的页面切换操作,极少被判定为Dial调节操作;但使用鼠标操作时,Dial能稳定捕获拖动手势,即使是水平拖动也不会误触SwipeView的页面切换。
需求
能否让Dial拥有更高的触摸/滑动手势识别优先级,避免用户误触页面切换(实现与鼠标操作一致的交互效果)?Dial尺寸为窗口的70%,SwipeView可在Dial以外的区域进行滑动切换。
已尝试方案
- 尝试设置SwipeView的
interactive: !(dial1.pressed || dial2.pressed),但无效,因为Dial的pressed属性需在确定捕获输入后才会生效 - 考虑将SwipeView设为
interactive: false,但这样必须添加页面切换按钮,会占用UI空间 - 还考虑过使用编辑/完成按钮,但会增加操作复杂度
复现代码
基于Qt 6.3.0、Ubuntu 20.04、USB/HDMI触摸屏的最小复现示例:
import QtQuick import QtQuick.Controls.Basic Window { width: 480 height: 480 visible: true title: "SwipeView Dial Test" SwipeView { anchors.fill: parent Item { Dial { id: dial1 anchors.centerIn: parent width: parent.width * 0.7 height: parent.height * 0.7 } } Item { Dial { id: dial2 anchors.centerIn: parent width: parent.width * 0.7 height: parent.height * 0.7 } } } }
内容的提问来源于stack exchange,提问作者fury
相关产品推荐
相关产品推荐

