Qt Quick Controls 2 TextArea `tabChangesFocus`,如何使用 Tab 键改变焦点,而不是键入 Tab 字符
Qt Quick Controls 2 TextArea `tabChangesFocus`, how to use Tab key to change focus, not type Tab character
来自 Qt Quick Controls 1.x (http://doc.qt.io/qt-5/qml-qtquick-controls-textarea.html) 的 QML TextArea
有一个名为 tabChangesFocus
的 属性,可以将其设置为切换行为两个可能操作之间的 Tab 键:
true
:在TextArea
中输入制表符
false
: 将焦点移动到标签链中的下一项
快速控制 TextArea
中似乎不存在此 属性 2.x (https://doc.qt.io/qt-5/qml-qtquick-controls2-textarea.html)。
默认是 true
行为,但我想要 false
行为(焦点改变)。
有谁知道在 Quick Controls 2 中实现相同效果的简单方法吗?
这在将来可能会更方便,但您可以使用 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
}
}
}
另一种方法是使用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)
}
}
}
QML TextArea
有一个名为 tabChangesFocus
的 属性,可以将其设置为切换行为两个可能操作之间的 Tab 键:
true
:在TextArea
中输入制表符
false
: 将焦点移动到标签链中的下一项
快速控制 TextArea
中似乎不存在此 属性 2.x (https://doc.qt.io/qt-5/qml-qtquick-controls2-textarea.html)。
默认是 true
行为,但我想要 false
行为(焦点改变)。
有谁知道在 Quick Controls 2 中实现相同效果的简单方法吗?
这在将来可能会更方便,但您可以使用 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
}
}
}
另一种方法是使用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)
}
}
}