我有一个要重用的基本窗口。基本窗口具有一些键盘处理功能。
ApplicationWindow
{
id: base
visible: true
width: 600
height: 400
Item
{
id: baseitem
anchors.fill: parent
focus: true
Keys.onPressed:
{
console.log("base key: " + event.key)
event.accepted = true
// if (event.key === Qt.Key_Escape) {...}
}
MouseArea
{
id: basemousearea
anchors.fill: parent
onClicked:
{
console.log("base basemousearea clicked")
}
}
}
}
在重用此基本窗口时,我想添加更多的键盘处理功能。例如,基本窗口应仅处理Esc和Return,而重用窗口应处理其他一些键。但是,这不起作用。总是只执行基本窗口的Keys.onPressed。我是否将event.accepted设置为true或false也无关紧要。 (出于好奇,为了比较起见,我还添加了鼠标处理功能。在这种情况下,情况恰好相反,仅执行重用窗口的MouseArea.onClicked,而没有执行基本窗口的鼠标。)我该如何同时获取基本窗口的并执行重用窗口的Keys.onPressed?
这是重用窗口的代码:
Basewindow
{
id: main
Item
{
anchors.fill: parent
focus: true
Keys.onPressed:
{
console.log("main key: " + event.key)
event.accepted = true
// if (event.key === Qt.Key_F3) {...}
}
MouseArea
{
id: mainmousearea
anchors.fill: parent
onClicked:
{
console.log("main mainmousearea clicked")
}
}
}
}
答案 0 :(得分:0)
由于唯一关注的Item
可以接收键事件,因此您必须将focus: true
设置为该项。您可以通过接受事件或使用Keys.forwardTo: []
将事件转发到另一个项目来管理事件。例如:
import QtQuick 2.11
import QtQuick.Window 2.2
Window {
visible: true
width: 400
height: 400
Item {
id: item1
anchors.fill: parent
Keys.onPressed: {
console.log("Main: " + event.key);
item2.focus = true;
}
focus: true
Keys.forwardTo: [item2 ]
}
Sub {
id: item2
onChange: {
item1.focus = true;
}
}
}
Sub.qml
import QtQuick 2.11
Item {
signal change()
Keys.onPressed: {
console.log("Sub: " + event.key);
change();
}
}
有关更多信息,请参见Key Handling Priorities。