QML在其MouseArea组件中提供了PressAndHold信号,当鼠标区域被按下并保持一段时间时触发。http://doc.qt.io/qt-5/qml-qtquick-mousearea.html#pressAndHold-signal
这段时间被设置为800毫秒,我找不到任何修改此持续时间的方法。是否可以完成修改,如果可以,如何操作?
谢谢!
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);
时长值来源于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();
}
}
}
是的,这可以直接通过setMousePressAndHoldInterval()
(自2015年11月起添加)进行配置,例如:
int pressAndHoldInterval = 2000; // in [ms]
QGuiApplication::styleHints()->setMousePressAndHoldInterval(pressAndHoldInterval);
main()
开头,连同其他内容一起。#include <QStyleHints>
它将全局设置所需的间隔。
注意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
}
Timer
的running
属性设置为parent.pressed
来简化它,并且可以摆脱onPressed
和onReleased
处理程序。 - GrecKoQT += gui_private
,也没有直接的setMousePressAndHoldInterval
可用(至少我没有找到)。我猜这个属性就像“魔鬼”一样:D - BaCaRoZzo