QML 中奇怪的 ListView 和 MouseArea 行为
Strange ListView and MouseArea behaviour in QML
我的 QML 应用程序有一个横向菜单 (ListView
),它会根据用户选择的项目加载不同的页面。我的问题是,有时触摸输入会被注册但不会执行,直到屏幕接收到另一个输入(不一定在列表的元素上)并且这是随机发生的,至少从我的初始测试来看是这样。其他一切显然都很好,我不知道可能是什么原因。我尝试 console.log() 每个元素来确认此行为,实际上直到第二次输入发生时才显示输出。该应用程序还有一个 MouseArea
填满整个屏幕,在任何 touch/mouse 事件之后计时器启动,如果它没有收到任何输入,则 2 分钟后会显示“空闲”页面。起初我认为这可能会以某种方式捕获鼠标事件,但摆脱它并不能解决问题
这是定时器的代码:
Timer {
id: timerStandby
interval: 120000
triggeredOnStart: false
onTriggered: mainLoader.source = "StandbyMenu.qml"
}
}
// Fill screen to catch user input and hide cursor
MouseArea {
id: timerStandbyArea
z: 100
propagateComposedEvents: true
anchors.fill: parent
cursorShape: Qt.BlankCursor
onClicked: {
timerStandby.restart()
mouse.accepted = false;
//console.log("start timer")
testTch.visible = true
}
onPressed: {
timerStandby.restart()
mouse.accepted = false;
//console.log("start timer")
testTch.visible = true
}
onReleased: {
timerStandby.restart()
mouse.accepted = false;
//console.log("start timer")
testTch.visible = false
}
onDoubleClicked: {
timerStandby.restart()
mouse.accepted = false;
//console.log("start timer")
}
onPositionChanged: {
timerStandby.restart()
mouse.accepted = false;
//console.log("start timer")
}
onPressAndHold: {
timerStandby.restart()
mouse.accepted = false;
//console.log("start timer")
}
}
我的下一个假设是我的列表是问题所在,但一个简单的 ColumnLayout
行为方式相同
使用 QML 分析器我注意到 OnClicked
事件并不总是 return released()
信号。作为临时解决方案,我决定对该特定列表使用 onPressed
,但仍然不确定为什么会发生这种情况
我的 QML 应用程序有一个横向菜单 (ListView
),它会根据用户选择的项目加载不同的页面。我的问题是,有时触摸输入会被注册但不会执行,直到屏幕接收到另一个输入(不一定在列表的元素上)并且这是随机发生的,至少从我的初始测试来看是这样。其他一切显然都很好,我不知道可能是什么原因。我尝试 console.log() 每个元素来确认此行为,实际上直到第二次输入发生时才显示输出。该应用程序还有一个 MouseArea
填满整个屏幕,在任何 touch/mouse 事件之后计时器启动,如果它没有收到任何输入,则 2 分钟后会显示“空闲”页面。起初我认为这可能会以某种方式捕获鼠标事件,但摆脱它并不能解决问题
这是定时器的代码:
Timer {
id: timerStandby
interval: 120000
triggeredOnStart: false
onTriggered: mainLoader.source = "StandbyMenu.qml"
}
}
// Fill screen to catch user input and hide cursor
MouseArea {
id: timerStandbyArea
z: 100
propagateComposedEvents: true
anchors.fill: parent
cursorShape: Qt.BlankCursor
onClicked: {
timerStandby.restart()
mouse.accepted = false;
//console.log("start timer")
testTch.visible = true
}
onPressed: {
timerStandby.restart()
mouse.accepted = false;
//console.log("start timer")
testTch.visible = true
}
onReleased: {
timerStandby.restart()
mouse.accepted = false;
//console.log("start timer")
testTch.visible = false
}
onDoubleClicked: {
timerStandby.restart()
mouse.accepted = false;
//console.log("start timer")
}
onPositionChanged: {
timerStandby.restart()
mouse.accepted = false;
//console.log("start timer")
}
onPressAndHold: {
timerStandby.restart()
mouse.accepted = false;
//console.log("start timer")
}
}
我的下一个假设是我的列表是问题所在,但一个简单的 ColumnLayout
行为方式相同
使用 QML 分析器我注意到 OnClicked
事件并不总是 return released()
信号。作为临时解决方案,我决定对该特定列表使用 onPressed
,但仍然不确定为什么会发生这种情况