У меня есть StackView с двумя элементами в нем. Оба элемента должны обрабатывать некоторые ключи.Управление ключами в стеке с несколькими элементами
Я бы предположил, что если currentItem
в StackView не обрабатывает ключ, ключ будет перенаправлен на нижние уровни, но, по-видимому, это не так.
Следующий пример иллюстрирует проблему. При нажатии, например, «A», я вижу, что ключ обрабатывается layer1
и самим стеклом, но ключ не обрабатывается layer0
.
Обратите внимание, что layer0
остается видимым после нажатия layer1
на нем из-за properties.exitItem.visible = true
заявление в transitionFinished
import QtQuick 2.0
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
Window {
id: mainWindow
visible: true
width: 1280
height: 720
color: "black"
Component {
id: layer0
Rectangle {
focus:true
width:200;height:200;color:"red"
Keys.onPressed: console.log("layer0")
}
}
Component {
id: layer1
Rectangle {
focus:true
width:200;height:200;color:"#8000FF00"
Keys.onPressed: console.log("layer1")
}
}
StackView {
id: stack
width: parent.width
height: parent.height
focus: true
Component.onCompleted: {
stack.push(layer0)
stack.push(layer1).focus=true
}
Keys.onPressed: {
console.log("StackView.onPressed")
}
delegate: StackViewDelegate {
function transitionFinished(properties)
{
properties.exitItem.visible = true
properties.exitItem.focus = true
}
}
}
}
Благодарим за объяснение (особенно родительская часть для родственников)! У вашего предложения есть два недостатка: мы не можем прекратить распространение (хотя мы можем проверить флаг event.accepted), и мы не можем гарантировать (я думаю), что ключи сначала принимаются самым высоким уровнем. Я рассмотрю метод Keys.forwardTo (lowerLayerItem). –