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

时间:2015-02-25 21:14:10

标签: qt qml

当鼠标区域被按下“持续时间长”时,QML在其MouseArea组件中提供PressAndHold信号 http://doc.qt.io/qt-5/qml-qtquick-mousearea.html#pressAndHold-signal

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

谢谢!

3 个答案:

答案 0 :(得分:7)

如果您看到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();
        }
    }
}

答案 1 :(得分:4)

是的,可以使用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,因此可能会在没有警告的情况下删除/重构。

答案 2 :(得分:0)

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

Documentation

import QtQuick 2.9 // 2.9 or higher

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