【问题标题】: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 毫秒,我找不到修改此持续时间的方法。 可以做到吗?如果可以,我该怎么做?

谢谢!

【问题讨论】:

    标签: qt qml


    【解决方案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
      }
      

      【讨论】:

        猜你喜欢
        • 2017-01-19
        • 2014-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-12
        • 1970-01-01
        • 2022-08-04
        相关资源
        最近更新 更多