QML:是不是可以更改鼠标区域的长持续时间
Posted
技术标签:
【中文标题】QML:是不是可以更改鼠标区域的长持续时间【英文标题】:QML: is it possible to change the long duration of a mouse AreaQML:是否可以更改鼠标区域的长持续时间 【发布时间】:2015-02-25 21:14:10 【问题描述】:QML 在其 MouseArea 组件中提供 PressAndHold 信号,当鼠标区域被“长时间”按下时 http://doc.qt.io/qt-5/qml-qtquick-mousearea.html#pressAndHold-signal
此持续时间设置为 800 毫秒,我找不到修改此持续时间的方法。 可以做到吗?如果可以,我该怎么做?
谢谢!
【问题讨论】:
【参考方案1】:如果您将看到 MouseArea
源 (Src/qtdeclarative/src/quick/items/qquickmousearea.cpp),您会发现这一行:
d->pressAndHoldTimer.start(qApp->styleHints()->mousePressAndHoldInterval(), this);
持续时间值来自QStyleHints
,但它是只读的,因为该值是平台指定的。所以你的问题的答案是:“不”,如果你不打算改变来源。
但您仍然可以模拟这些事件,例如:
MouseArea
property int pressAndHoldDuration: 2000
signal myPressAndHold()
anchors.fill: parent
onPressed:
pressAndHoldTimer.start();
onReleased:
pressAndHoldTimer.stop();
onMyPressAndHold:
console.log("It works!");
Timer
id: pressAndHoldTimer
interval: parent.pressAndHoldDuration
running: false
repeat: false
onTriggered:
parent.myPressAndHold();
【讨论】:
好的,这很有帮助!非常感谢 您可以通过将Timer
的running
属性设置为parent.pressed
并去掉onPressed
和onReleased
处理程序来简化它。
有趣的是,即使使用私有 API,即QT += gui_private
,也没有直接的setMousePressAndHoldInterval
可用(至少我没有找到它)。我猜这个属性是“魔鬼”:D【参考方案2】:
可以,这个可以直接用setMousePressAndHoldInterval()
(added in November 2015)配置,例如:
int pressAndHoldInterval = 2000; // in [ms]
QGuiApplication::styleHints()->setMousePressAndHoldInterval(pressAndHoldInterval);
将上述内容放在您的main()
的开头,以及
#include <QStyleHints>
它会根据需要全局设置间隔。
注意 #1:根据 Qt bug report,这是系统范围的配置,因此无法对单个 MouseArea 组件进行微调。
注意 #2:在 the source code 中,doxygen 将其列为 \internal
,因此可能会在没有警告的情况下将其删除/重构。
【讨论】:
【参考方案3】:从 Qt 5.9 开始,pressAndHoldInterval
属性会覆盖在发出 pressAndHold
之前经过的时间(以毫秒为单位)。
Documentation
import QtQuick 2.9 // 2.9 or higher
MouseArea
pressAndHoldInterval: 100 // duration of 100ms
【讨论】:
以上是关于QML:是不是可以更改鼠标区域的长持续时间的主要内容,如果未能解决你的问题,请参考以下文章
QML PathView:通过鼠标滚轮更改路径视图的当前索引
QML MouseArea:如何将鼠标事件传播到其他鼠标区域?