QML在其MouseArea组件中提供PressAndHold信号,当鼠标区域按下"持续时间长"时 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);
Run Code Online (Sandbox Code Playgroud)
持续时间值来自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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
是的,这可以直接配置setMousePressAndHoldInterval()
(2015 年 11 月添加),例如:
int pressAndHoldInterval = 2000; // in [ms]
QGuiApplication::styleHints()->setMousePressAndHoldInterval(pressAndHoldInterval);
Run Code Online (Sandbox Code Playgroud)
将上述内容放在您的main()
,开头
#include <QStyleHints>
Run Code Online (Sandbox Code Playgroud)
它将根据需要全局设置间隔。
注意 #1:根据Qt 错误报告,这是系统范围的配置,因此无法对单个 MouseArea 组件进行微调。
注意#2:在源代码中,doxygen 将其列为,\internal
因此可能会在没有警告的情况下删除/重构。
从 Qt 5.9 开始,该属性会覆盖发出pressAndHoldInterval
之前经过的时间(以毫秒为单位) 。pressAndHold
import QtQuick 2.9 // 2.9 or higher
MouseArea {
pressAndHoldInterval: 100 // duration of 100ms
}
Run Code Online (Sandbox Code Playgroud)