Qt QML:是否可以更改鼠标区域的长持续时间

Qt QML:是否可以更改鼠标区域的长持续时间,qt,qml,Qt,Qml,当鼠标区域被按下“长时间”时,QML在其MouseArea组件中提供按住信号 这个持续时间设置为800ms,我找不到修改这个持续时间的方法。 可以这样做吗?如果可以,我怎么做 谢谢 如果您看到MouseAreasource(),您会发现这一行: d->pressAndHoldTimer.start(qApp->styleHints()->mousePressAndHoldInterval(), this); durations值来自QStyleHints,但它是只读的,因为

当鼠标区域被按下“长时间”时,QML在其MouseArea组件中提供按住信号

这个持续时间设置为800ms,我找不到修改这个持续时间的方法。 可以这样做吗?如果可以,我怎么做


谢谢

如果您看到
MouseArea
source(),您会发现这一行:

d->pressAndHoldTimer.start(qApp->styleHints()->mousePressAndHoldInterval(), this);
durations值来自
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();
        }
    }
}

是的,可以直接使用
setMousePressAndHoldInterval()
进行配置,例如:

将以上内容放在
main()
的开头,以及

#include <QStyleHints>
#包括
它将根据需要全局设置间隔

注意#1:根据,这是一种系统范围的配置,因此无法对单个鼠标ea组件进行微调


注意#2:在中,强氧剂将其列为
\internal
,因此可能会在没有警告的情况下删除/重构该文件。

自Qt 5.9以来,属性
pressAndHoldInterval
覆盖发出
pressAndHold
之前的运行时间(毫秒)


好的,这很有帮助!非常感谢您通过将
计时器的
running
属性设置为
parent.pressed
并去掉
onPressed
onReleased
处理程序,您可以简化这一过程。有趣的是,即使使用私有API,即
QT+=gui\u private
,没有可用的直接
setMousePressAndHoldInterval
(至少我没有找到它)。我猜这个属性就是“魔鬼”:D
#include <QStyleHints>
import QtQuick 2.9 // 2.9 or higher

MouseArea {
    pressAndHoldInterval: 100 // duration of 100ms
}