Qt基于Qml文本字段编辑完成事件处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt基于Qml文本字段编辑完成事件处理相关的知识,希望对你有一定的参考价值。
演示效果:
1. 定义文本字段编辑完成信号
signal textFieldEditFinished //编辑完成信号
2.处理鼠标点击文本字段外窗口其它任意位置
//鼠标点击窗口任意位置
MouseArea
anchors.fill: parent
onClicked:
textField.textFieldEditFinished();//发射编辑完成信号
3.处理在文本字段编辑框按下回车键后
//文本字段编辑完成信号--按下回车键时
onEditingFinished :
textField.textFieldEditFinished();//发射编辑完成信号
4.文本字段组件定义
//文本字段
TextField
id: textField
text: textMetrics.elidedText
height: 32
width: 120
anchors.centerIn: parent
verticalAlignment: Text.AlignVCenter
horizontalAlignment:Text.AlignLeft
selectByMouse: true
signal textFieldEditFinished //编辑完成信号
//背景
background: Rectangle
id: textFieldback
implicitWidth: 120
implicitHeight: 32
border.color: "#FF00FF"
visible: false
radius: 5
//鼠标按下时信号
onPressed:
textFieldback.visible = true;//显示边框
textField.text = textMetrics.text;//填充字段内容
//文本字段编辑完成信号--按下回车键时
onEditingFinished :
textField.textFieldEditFinished();//发射编辑完成信号
5.保存文本组件TextMetrics定义
//保存文本用的TextMetrics
TextMetrics
id: textMetrics
elide: Text.ElideRight
elideWidth: textField.width - 12
text: qsTr("保存文本的TextMetrics")
6.通过信号连接器处理文本字段发出的信号
//信号连接器
Connections
target: textField
//处理文本字段发出的编辑完成
onTextFieldEditFinished:
//处理编辑完事业务
if (textFieldback.visible !== true) return;
textFieldback.visible = false;//隐藏文本字段边框
textField.focus = false;//取消焦点
textMetrics.text = textField.text;//保存文本段的内容
textField.text = textMetrics.elidedText;//超出文本显示...
完整Qml源码
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.15
import QtGraphicalEffects 1.15
ApplicationWindow
visible: true
width: 400
height: 300
title: qsTr("Qt基于Qml文本字段编辑完成事件处理")
//鼠标点击窗口任意位置
MouseArea
anchors.fill: parent
onClicked:
textField.textFieldEditFinished();//发射编辑完成信号
//保存文本用的TextMetrics
TextMetrics
id: textMetrics
elide: Text.ElideRight
elideWidth: textField.width - 12
text: qsTr("保存文本的TextMetrics")
//文本字段
TextField
id: textField
text: textMetrics.elidedText
height: 32
width: 120
anchors.centerIn: parent
verticalAlignment: Text.AlignVCenter
horizontalAlignment:Text.AlignLeft
selectByMouse: true
signal textFieldEditFinished //编辑完成信号
//背景
background: Rectangle
id: textFieldback
implicitWidth: 120
implicitHeight: 32
border.color: "#FF00FF"
visible: false
radius: 5
//鼠标按下时信号
onPressed:
textFieldback.visible = true;//显示边框
textField.text = textMetrics.text;//填充字段内容
//文本字段编辑完成信号--按下回车键时
onEditingFinished :
textField.textFieldEditFinished();//发射编辑完成信号
//信号连接器
Connections
target: textField
//处理文本字段发出的编辑完成
onTextFieldEditFinished:
//处理编辑完事业务
if (textFieldback.visible !== true) return;
textFieldback.visible = false;//隐藏文本字段边框
textField.focus = false;//取消焦点
textMetrics.text = textField.text;//保存文本段的内容
textField.text = textMetrics.elidedText;//超出文本显示...
以上是关于Qt基于Qml文本字段编辑完成事件处理的主要内容,如果未能解决你的问题,请参考以下文章
QML程序实现动态切换多语言(ListModel/ListElement中的文本的多语言处理)