[Interest] Keyboard navigation issues in Quick2
Ola Røer Thorsen
ola at silentwings.no
Fri Nov 22 14:18:24 CET 2013
Hi all,
here is a case that I find rather limiting and time-consuming. It has to do
with focus scopes and keyboard navigation. I'm looking for a best way to
deal with the following situation:
- I have a ColumnLayout of button-like items, like a popup-menu.
- The first item has "focus" set to true.
- KeyNavigation.down is used to walk between these to move focus.
- The Items' "enabled"-value can be set to false if this item is
unavailable for some reason. In this case "KeyNavigation" works fine and
jumps past the element and on to the next (good).
However if you try to activate focus on the first item (using KeyNavigation
from some other item), and it is disabled, you get no focus at all, and
keyboard navigation is stuck.
I would expect that focus would move on to the next item in the focus
scope, if the item with active focus was disabled.
Also if you disable the item that has focus, focus does not move to the
next item. So you're stuck again.
Why would I disable one of the items? Well if this is a menu, it could be
that one of the menu actions are unavailable for some reason.
Isn't this a bug? It can be worked around with ugly javascript code, but
the fixes are not scalable and you will need calling "forceActiveFocus" on
items instead.
"KeyNavigation" seems to be way to create a focus order chain similar to
what you could do with widgets. Or am I wrong?
Below is an example snippet that demonstrate these two issues (tested with
Qt5.2RC1). It has two columns that you can jump between using the cursor
keys. Press the spacebar to disable the upper left box, and see what
happens if focus is on the right, or focus is on left box 1.
Best regards,
Ola
import QtQuick 2.1
import QtQuick.Layouts 1.0
Rectangle {
width: 800
height: 480
Keys.onSpacePressed: {
box1.enabled = !box1.enabled;
}
Text {
anchors.centerIn: parent
text: "Use cursor keys to move focus around.\nPush spacebar to
toggle box1 enabled.\n\nNote that it is not possible to go from the right
boxes to\nthe left if box1 is disabled (gray).\nYou'd expect that box2
would get focus if box1 is disabled.\nIt is also possible to get stuck if
box1 is disabled while it has active focus.\n"
}
ColumnLayout {
anchors.left: parent.left
anchors.top: parent.top
anchors.bottom: parent.bottom
width: 200
Rectangle {
focus: true
id: box1
color: enabled ? (activeFocus ? "green" : "orange") : "gray"
width: 180
height: 30
Text {
anchors.fill: parent
text: "box1"
}
KeyNavigation.down: box2
KeyNavigation.right: rbox1
}
Rectangle {
focus: true
id: box2
color: enabled ? (activeFocus ? "green" : "orange") : "gray"
width: 180
height: 30
Text {
anchors.fill: parent
text: "box2"
}
KeyNavigation.down: box3
KeyNavigation.right: rbox1
}
Rectangle {
focus: true
id: box3
color: enabled ? (activeFocus ? "green" : "orange") : "gray"
width: 180
height: 30
Text {
anchors.fill: parent
text: "box3"
}
KeyNavigation.down: box4
KeyNavigation.right: rbox1
}
Rectangle {
focus: true
id: box4
color: enabled ? (activeFocus ? "green" : "orange") : "gray"
width: 180
height: 30
Text {
anchors.fill: parent
text: "box4"
}
KeyNavigation.down: box1
KeyNavigation.right: rbox1
}
}
ColumnLayout {
anchors.right: parent.right
anchors.top: parent.top
anchors.bottom: parent.bottom
width: 200
Rectangle {
focus: true
id: rbox1
color: enabled ? (activeFocus ? "green" : "orange") : "gray"
width: 180
height: 30
Text {
anchors.fill: parent
text: "rightbox1"
}
KeyNavigation.down: rbox2
KeyNavigation.left: box1
}
Rectangle {
focus: true
id: rbox2
color: enabled ? (activeFocus ? "green" : "orange") : "gray"
width: 180
height: 30
Text {
anchors.fill: parent
text: "rightbox2"
}
KeyNavigation.down: rbox1
KeyNavigation.left: box1
}
}
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20131122/4dd97e06/attachment.html>
More information about the Interest
mailing list