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

问题描述 投票:0回答:2

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

  • true:在TextArea中输入Tab字符
  • false:将焦点移动到选项卡链中的下一个项目

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

默认是true行为,但我想要false行为(焦点更改)。

有没有人知道一种简单的方法来实现快速控制2的相同效果?

qml qtquickcontrols2
2个回答
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)
        }
    }
}

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
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.