当鼠标区域被按下“持续时间长”时,QML在其MouseArea组件中提供PressAndHold信号 http://doc.qt.io/qt-5/qml-qtquick-mousearea.html#pressAndHold-signal
此持续时间设置为800毫秒,我找不到修改此持续时间的方法。 可以这样做,如果是的话,我该怎么做?
谢谢!
答案 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
发出之前经过的时间(以毫秒为单位)。
import QtQuick 2.9 // 2.9 or higher
MouseArea {
pressAndHoldInterval: 100 // duration of 100ms
}