我想在用户按下并按住按钮时打开上下文菜单(为方便起见,我使用按钮)。如果我做
Button
{
text: model.ualabel
MouseArea
{
preventStealing: true
anchors.fill: parent
onPressAndHold: uaContextMenu.open()
}
ContextMenu
{
id: uaContextMenu
MenuLayout
{
MenuItem { /**/ }
}
}
}
然后负责pressAndHold的MouseArea会窃取所有手势,即使按钮也无法点击。我究竟做错了什么?我正在使用Qt 4.7并导入QtQuick 1.1
和com.nokia.meego 1.0
由于
答案 0 :(得分:2)
我发现可以在QML的按钮上模拟按住这样的按钮:
Button {
id: button
signal pressAndHold()
Timer {
id: longPressTimer
interval: 2000 //your press-and-hold interval here
repeat: false
running: false
onTriggered: {
button.pressAndHold()
}
}
onPressedChanged: {
if ( pressed ) {
longPressTimer.running = true;
} else {
longPressTimer.running = false;
}
}
}
答案 1 :(得分:1)
问题是您的鼠标区域与Button的鼠标区域竞争以接收鼠标事件。尝试在鼠标区域设置propogateComposedEvents: true
,这应该允许事件在可视堆栈中向下传播到按钮的鼠标区域。有关详细信息,请参阅http://qt-project.org/doc/qt-5.0/qtquick/qml-qtquick2-mousearea.html#propagateComposedEvents-prop。
阅读完评论后,我的新建议是将mouseArea中点击的信号手动传播到按钮。这可以通过调用buttonId.clicked()
来实现,{{1}}将手动发出按钮上的点击信号。
答案 2 :(得分:0)
QML Button具有自己的pressAndHold()信号,因此您可以使用它。
Button {
text: model.ualabel
ContextMenu
{
id: uaContextMenu
MenuLayout
{
MenuItem { /**/ }
}
}
onPressAndHold: uaContextMenu.open()
}