QML:是否可以更改鼠标区域的持续时间
QML: is it possible to change the long duration of a mouse Area
QML 在其 MouseArea 组件中提供一个 PressAndHold 信号,当鼠标区域被按下 "long duration"
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
但它是只读的,因为该值是指定的平台。所以你的问题的答案:"No",如果你不打算改变来源。
但您仍然可以模拟此事件,例如:
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()
(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
因此这可能是 removed/refactored 而没有警告。
从 Qt 5.9 开始,属性 pressAndHoldInterval
会覆盖 pressAndHold
发出前的经过时间(以毫秒为单位)。
import QtQuick 2.9 // 2.9 or higher
MouseArea {
pressAndHoldInterval: 100 // duration of 100ms
}
QML 在其 MouseArea 组件中提供一个 PressAndHold 信号,当鼠标区域被按下 "long duration" 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
但它是只读的,因为该值是指定的平台。所以你的问题的答案:"No",如果你不打算改变来源。
但您仍然可以模拟此事件,例如:
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()
(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
因此这可能是 removed/refactored 而没有警告。
从 Qt 5.9 开始,属性 pressAndHoldInterval
会覆盖 pressAndHold
发出前的经过时间(以毫秒为单位)。
import QtQuick 2.9 // 2.9 or higher
MouseArea {
pressAndHoldInterval: 100 // duration of 100ms
}