【问题标题】:Implementing touch sounds with Qt5 Quick Controls 2使用 Qt5 Quick Controls 2 实现触摸声音
【发布时间】:2023-03-20 01:05:01
【问题描述】:

我目前正在寻找一种方法来为 Qt5 Quick Controls 2 应用程序实现触摸声音,类似于 Android 上原生可用的触摸声音。但是,到目前为止,我还没有找到可靠地实现它们的方法。触摸声音应仅在以下情况下发生,例如一个按钮被按下,但当用户点击屏幕的随机部分时没有。

我的第一次尝试是扫描 QML 对象树并连接到 C++ 中的所有 clicked() 信号。这部分工作,但由于我使用 QML 加载器组件动态加载 QML 代码,即使我在树中的所有对象上安装了 ChildAdded 事件的过滤器,我也无法保持同步。我也没有使用这种方法捕获所有(子)组件,因为例如内部使用的 QQuickSpinButton 不会发出 clicked() 信号。

有其他解决方案的想法吗?

【问题讨论】:

    标签: qml qt5 qtquick2 qtquickcontrols2


    【解决方案1】:

    另一种方法是在应用程序级别执行此操作。

    在您的QGuiApplication 上使用installEventFilter,然后在您的eventFilter 中,对QEvent::MouseButtonPressQEvent::MouseButtonRelease 类型的事件做出反应(我认为您不需要处理QEvent::TouchBegin 和朋友)。

    【讨论】:

    • 这种方法遇到的问题是,即使用户单击 Qml 窗格等不可点击的区域,我也会收到 MouseButtonPress 事件。
    • 真的!当 flickable 或其他东西抓住鼠标控制时,您想要什么行为?例如,您有一个带有委托的列表视图,用户开始滚动委托:委托将获得一个新闻事件,但随后它将被取消并且没有发布事件。那应该触发声音吗?
    • 不,那不应该触发声音。只有当用户点击可点击区域时才会触发声音,例如我有一个 Listview,其中每个委托都是一个 Rectangle,其中包含一个实现 onClicked 的 MouseArea。单击此类委托应该触发声音,但不应在此类委托上开始滚动。声音旨在提供有关成功触摸 ui 元素的反馈,例如只有当用户确实按下按钮时才会触发声音,但如果他没有按下按钮则不会触发。
    • 所以声音应该在松开而不是按下时发出?
    • 当然这可能会更好,但我看不出这对实际问题有什么帮助。当我过滤 MouseButtonRelease 事件时,我仍然无法推断是否单击了组件。
    猜你喜欢
    • 2017-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多