如何在 qml 中捕捉从虚拟键盘按下的 Key_Cancel?
Posted
技术标签:
【中文标题】如何在 qml 中捕捉从虚拟键盘按下的 Key_Cancel?【英文标题】:How to catch Key_Cancel pressed from virtual keyboard in qml? 【发布时间】:2019-06-17 11:38:30 【问题描述】:我有以下TextField
作为链接到虚拟键盘的输入字段。
TextField
id: inputField
color: buttonActive ? Style.buttonColorTextOn : Style.buttonColorTextOff
text: "100"
topPadding: 8
anchors.left: parent.left
anchors.leftMargin: 8
anchors.right: icon.left
anchors.rightMargin: 8
anchors.top: parent.top
anchors.topMargin: 6
anchors.bottom: parent.bottom
anchors.bottomMargin: 6
inputMethodHints: Qt.ImhDigitsOnly
validator: IntValidator bottom:lowestInput; top: highestInput
selectionColor: Style.textSelectionBg
selectedTextColor: Style.fontcolor1
font.family: stdFont.name
horizontalAlignment: TextField.AlignRight
verticalAlignment: TextField.AlignVCenter
font.pixelSize: Style.highlightedFontSize
leftPadding: 3
rightPadding: 3
TextMetrics
id: textMetrics
text: inputField.text
font.family: stdFont.name
font.pixelSize: Style.highlightedFontSize
background: Rectangle
color: buttonActive ? Style.buttonColorOn : Style.buttonColorOff
border.color: buttonActive ? Style.buttonColorTextOn : Style.buttonColorTextOff
border.width: 1
Rectangle
id: inputFieldColor
color: buttonActive ? Style.buttonColorOn : Style.buttonColorOff
anchors.top: parent.top
anchors.topMargin: inputField.topPadding - 1
anchors.right: parent.right
anchors.rightMargin: inputField.rightPadding - 1
width: textMetrics.width + inputField.rightPadding
height: textMetrics.height
此键盘如下所示。
这里的取消键在键盘的自定义布局中构造如下。
Key
key: Qt.Key_Cancel
text: "cancel"
我的问题是,当按下虚拟键盘上的取消按钮时,我该如何捕捉?我想在插槽中捕获一些 onKeyCancelPressed 内容,并可能在按下取消按钮之前撤消对文本字段所做的更改。
谢谢。
【问题讨论】:
【参考方案1】:我认为唯一的方法是在 Key 代码本身中对其进行响应(textBeforeEditing
是您自己的变量):
onClicked: InputContext.priv.inputItem.text = InputContext.priv.inputItem.textBeforeEditing
缺点是它使用私有 API。
【讨论】:
所以,我必须放入Key
的Key_Cancel
范围内吗?但是虚拟键盘布局真的有可能知道textBeforeEditing
变量吗?
我想是的,是的。是的,变量应该没有问题。试试看,让我知道它是否有效。 :)以上是关于如何在 qml 中捕捉从虚拟键盘按下的 Key_Cancel?的主要内容,如果未能解决你的问题,请参考以下文章