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

QML: is it possible to change the long duration of a mouse Area

QML 在其 MouseArea 组件中提供一个 PressAndHold 信号,当鼠标区域被按下 "long duration" http://doc.qt.io/qt-5/qml-qtquick-mousearea.html#pressAndHold-signal

此持续时间设置为 800 毫秒,我找不到修改此持续时间的方法。 可以做到吗?如果可以,我该怎么做?

谢谢!

如果您将看到 MouseArea 来源 (Src/qtdeclarative/src/quick/items/qquickmousearea.cpp),您会发现这一行:

d->pressAndHoldTimer.start(qApp->styleHints()->mousePressAndHoldInterval(), this);

持续时间值来自 QStyleHints 但它是只读的,因为该值是指定的平台。所以你的问题的答案:"No",如果你不打算改变来源。

但您仍然可以模拟此事件,例如:

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() (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 因此这可能是 removed/refactored 而没有警告。

从 Qt 5.9 开始,属性 pressAndHoldInterval 会覆盖 pressAndHold 发出前的经过时间(以毫秒为单位)。

Documentation

import QtQuick 2.9 // 2.9 or higher

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