Qt Quick Controls 2 TextArea`tabChangesFocus`,如何使用Tab键更改焦点,而不是键入Tab字符

时间:2017-12-12 12:15:25

标签: qml qtquickcontrols2

来自Qt Quick Controls 1.x(http://doc.qt.io/qt-5/qml-qtquick-controls-textarea.html)的QML TextArea有一个名为tabChangesFocus的属性,可以将其设置为在两个可能的操作之间切换Tab键的行为:

  • true:在TextArea
  • 中输入制表符
  • false:将焦点移至标签链
  • 中的下一个项目

Quick Controls 2.x(https://doc.qt.io/qt-5/qml-qtquick-controls2-textarea.html)中的TextArea似乎不存在此属性。

默认为true行为,但我希望false行为(焦点更改)。

有没有人知道为Quick Control 2实现相同效果的简单方法?

2 个答案:

答案 0 :(得分:3)

将来可能会更方便,但您可以使用QML KeyNavigation设置标签导航:

import QtQuick 2.9
import QtQuick.Controls 2.2

ApplicationWindow {
    id: window
    width: 300
    height: 300
    visible: true

    Column {
        spacing: 20

        TextArea {
            id: textArea1
            focus: true
            text: "TextArea1"

            KeyNavigation.tab: textArea2
            KeyNavigation.backtab: textArea2
            KeyNavigation.priority: KeyNavigation.BeforeItem
        }

        TextArea {
            id: textArea2
            text: "TextArea2"

            KeyNavigation.tab: textArea1
            KeyNavigation.backtab: textArea1
            KeyNavigation.priority: KeyNavigation.BeforeItem
        }
    }
}

答案 1 :(得分:2)

另一种方法是使用Item::nextItemInFocusChain()。这样,您不需要知道焦点链中的下一个项目:

import QtQuick 2.9
import QtQuick.Controls 2.2

ApplicationWindow {
    id: window
    width: 300
    height: 300
    visible: true

    Column {
        spacing: 20

        TextArea {
            id: textArea1
            focus: true
            text: "TextArea1"

            Keys.onTabPressed: nextItemInFocusChain().forceActiveFocus(Qt.TabFocusReason)
        }

        TextArea {
            id: textArea2
            text: "TextArea2"
            objectName: text

            Keys.onTabPressed: nextItemInFocusChain().forceActiveFocus(Qt.TabFocusReason)
        }
    }
}