当前位置: 首页 > article >正文

QML使用Qt自带软键盘例子

//注意:一定要保证Qt有安装VirtualKeyboard插件

import QtQuick 2.10
import QtQuick.Window 2.3
import QtQuick.Controls 2.3
import QtQuick.VirtualKeyboard 2.1
import QtQuick.VirtualKeyboard.Settings 2.1

Window {
    id: root
    visible: true
    width: 1000
    height: 600
    color: "#F6F6F6"

    // 使窗口强制获得焦点
    MouseArea {
        anchors.fill: parent
        onClicked: forceActiveFocus()
    }

    TextField {
        id: textUser
        placeholderText: "请输入用户名"
        font.family: "Microsoft YaHei"
        font.pixelSize: 28
        topPadding: 10
        anchors.top: parent.top
        anchors.topMargin: 40
        anchors.left: parent.left
        anchors.leftMargin: 40

        background: Rectangle {
            implicitWidth: 424
            implicitHeight: 50
            radius: 4
            border.color: parent.focus  ? "#498ff8" : "#C4DBFC"
        }

        // 当选择输入框的时候才显示键盘
        onPressed: {
            inputX = x
            inputY = y + height
            inputPanel.visible = true
        }
    }

    TextField {
        id: textPasswd
        placeholderText: "请输入密码"
        font.family: "Microsoft YaHei"
        font.pixelSize: 28
        topPadding: 10
        anchors.top: parent.top
        anchors.topMargin: 120
        anchors.left: parent.left
        anchors.leftMargin: 40

        background: Rectangle {
            implicitWidth: 424
            implicitHeight: 50
            radius: 4
            border.color: parent.focus  ? "#498ff8" : "#C4DBFC"
        }

        // 当选择输入框的时候才显示键盘
        onPressed: {
            inputX = x
            inputY = y + height
            inputPanel.visible = true
        }
    }

    property int inputX: 0 // 键盘x坐标(动态)
    property int inputY: root.height // 键盘y坐标(动态)

    // 嵌入式虚拟键盘
    InputPanel {
        id: inputPanel
        z: 99
        //更改x,y即可更改键盘位置
        x: textUser.x
        y: root.height
        //更改width即可更改键盘大小
        width: root.width - 100
        visible: false

        externalLanguageSwitchEnabled: false

        states: State {
            name: "visible"
            when: inputPanel.active
            PropertyChanges {
                target: inputPanel
                // 将键盘顶部放在屏幕底部会使其隐藏起来
                x: inputX
                y: inputY
            }
        }

        Component.onCompleted: {
            VirtualKeyboardSettings.locale = "eesti" // 复古键盘样式
            VirtualKeyboardSettings.wordCandidateList.alwaysVisible = true

            // 允许的语言,重要!
            VirtualKeyboardSettings.activeLocales = ["en_GB","zh_CN"]
            // 默认的语言,重要!
            VirtualKeyboardSettings.locale = "en_GB"
        }

        // 这种集成方式下点击隐藏键盘的按钮是没有效果的,只会改变active,因此我们自己处理一下
        onActiveChanged: {
            if(!active) { visible = false }
        }
    }

    Button{
        id:btn_Language
        text: "切换语言"
        width:200
        height: 50
        topPadding: 10
        anchors.top: parent.top
        anchors.topMargin: 200
        anchors.left: parent.left
        anchors.leftMargin: 100
        onClicked: {
            if (VirtualKeyboardSettings.locale === "en_GB") {
                VirtualKeyboardSettings.locale = "zh_CN";
                text = "切换语言(中文)"
            } else {
                VirtualKeyboardSettings.locale = "en_GB";
                text = "切换语言(英文)"
            }
        }
    }
}
 


http://www.kler.cn/a/322335.html

相关文章:

  • 生成式语言模型 三范式 预训练、微调、强化反馈学习
  • SRP 实现 Cook-Torrance BRDF
  • 递归(3)----力扣40组合数2,力扣473火柴拼正方形
  • 【分割评价指标-nnUNet V2训练】- AutoDL
  • BERT模型中的多头注意力机制详解
  • 51单片机--- 矩阵按键仿真
  • 深度学习-图像处理篇1.1-1.2神经网络
  • 【Prometheus】实战二:Prometheus数据监控自定义组件Pushgateway
  • Day101 代码随想录打卡|动态规划篇--- 分割等和子集
  • 帆软通过JavaScript注入sql,实现数据动态查询
  • [Linux#55][网络协议] 序列化与反序列化 | TcpCalculate为例
  • 微信小程序加载H5页面及与H5页面通信的实战教程
  • 代码随想录算法训练营 | 二叉树理论基础
  • 【python】函数的定义
  • 简历技能面试问答
  • MySQL InnoDB MVCC数据结构分析
  • 基于Hadoop的NBA球员大数据分析及可视化系统
  • Splashtop 在2024年 CybersecAsia 读者之选奖项评选中荣获新星奖
  • 【Vue】以RuoYi框架前端为例,ElementUI封装图片上传组件——将图片信息转成base64后提交到后端保存
  • opengauss使用遇到的问题,随时更新
  • android 页面布局(1)
  • 从git删除/上传新的文件-简单命令菜鸟教程
  • 常用并发设计模式精讲
  • Unity八股总结
  • java在开发中的总结
  • HalconDotNet的特征点检测和匹配方法