ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

qt quick-QML虚拟软键盘V2版本(手机键盘弹出机制)-支持换肤、动态加载移除语言

2021-12-25 21:32:25  阅读:263  来源: 互联网

标签:换肤 set qt parent width visible 移除 input NumberAnimation


 在上章我们学习了45.qt quick-qml虚拟软键盘详解(一)_诺谦的博客-CSDN博客46.qt quick-自定义非常好看的qml虚拟软键盘-支持换肤、动态加载移除语言(二)_心中无女人 拔刀自然神 剑谱第一页 忘掉心上人-CSDN博客但是发现在嵌入式触摸屏上并没有手机那样方便、所以本章来实现手机键盘弹出机制

1.效果图展示

 哔哩哔哩视频展示:QML虚拟软键盘V2版本(手机键盘弹出机制)_哔哩哔哩_bilibili

Gif如下所示:

本专栏的所有demo资源已上传至专栏群.群号在该专栏第一章底部获取
订阅本专栏的请加该群内部技术交流、源码交流、
(尽量选择订阅专栏、学习会员会验证失败)


代码如下所示:

import QtQuick 2.14
import QtQuick.Window 2.0
import QtQuick.Controls 2.14
import QtQuick.VirtualKeyboard 2.14
import QtQuick.VirtualKeyboard.Styles 2.14
import QtQuick.VirtualKeyboard.Settings 2.14
import Qt.labs.settings 1.0
import "./common"

Rectangle {
    id: contains
    height:  width*0.353
    visible: false
    property int targetoffsetY : 0

    color: Qt.rgba(0,0,0,keySets.skinOpacity)

    signal keyboardOpend(bool isCover, int coverOffsetY);
    signal keyboardClosed();

    AnimatedImage {
       id: image
       anchors.fill: parent
       source: keySets.backImage
       fillMode: Image.PreserveAspectCrop
       opacity: keySets.skinOpacity
       onSourceChanged: {
           playing = true
       }
    }
    MouseArea {
        anchors.fill: parent
    }
    Settings {
       id: keySets
       fileName: "keySets.ini"
       property string backImage: "qrc:/keyboard_plugin/images/back.jpg"
       property string language: "zh_CN{}en_US"
       property real skinOpacity: 1.0

    }

    ImageButton {
        anchors.right: parent.right
        anchors.top: parent.top
        width: (input.height / 800)* 88
        height: width
        imageSrc: set.visible ? "qrc:/keyboard_plugin/images/return.png" : "qrc:/keyboard_plugin/images/set.png"
        hoverimageSrc: set.visible ? "qrc:/keyboard_plugin/images/return_hover.png" :  "qrc:/keyboard_plugin/images/setHover.png"
        backColor: set.visible ? "#11111111" : "#AA111111"
        backHoverColor: "#BB111111"
        ToolTip.delay: 1000
        ToolTip.visible: hovered
        ToolTip.text: qsTr("设置")
        z: 999
        onClicked: {
            console.log("onClicked2:", set.visible)
            set.visible ?  hideSetAnim.start() : showSetAnim.start()
        }
        visible: true
        focusPolicy: Qt.NoFocus
    }

    KeyboardSet {
       id: set
       anchors.top: parent.top
       width: parent.width
       height: parent.height
       visible: false
       clip: true
    }

    InputPanel {
            id: input
            visible: parent.visible
            width: parent.width
            anchors.top: parent.top
            onActiveChanged: {
                if(!active) {
                    keyboardClosed();
                }
                else {
                    contains.visible = true;
                }

            }
    }

    SequentialAnimation {
        id: showSetAnim
        ScriptAction {
            script: {
                console.log("showSetAnim")
                set.x = contains.width
                set.visible = true;
                input.enabled = false;
            }
        }

        ParallelAnimation {
            NumberAnimation {
                target: input
                properties: "opacity"
                from: 1.0
                to: 0
                duration: 200
            }
            NumberAnimation {
                target: input
                properties: "scale"
                from: 1.0
                to: 0.5
                duration: 200
            }
            NumberAnimation {
                target: set
                properties: "opacity"
                from: 0.0
                to: 1.0
                duration: 300
            }
            NumberAnimation {
                target: set
                property: "x"
                from: contains.width
                to: 0
                duration: 300
            }


        }

    }

    SequentialAnimation {
        id: hideSetAnim
        ParallelAnimation {
            NumberAnimation {
                target: input
                properties: "opacity"
                from: 0
                to: 1.0
                duration: 300
            }
            NumberAnimation {
                target: set
                properties: "opacity"
                from: 1.0
                to: 0.3
                duration: 200
            }
            NumberAnimation {
                target: input
                properties: "scale"
                from: 0
                to: 1.0
                duration: 300
            }
            NumberAnimation {
                target: set
                property: "x"
                from: 0
                to: contains.width
                duration: 200
            }
        }

        ScriptAction {
            script: {
                input.enabled = true;
                set.visible = false;
            }
        }

    }


    Component.onCompleted: {
        VirtualKeyboardSettings.wordCandidateList.alwaysVisible = true
        VirtualKeyboardSettings.styleName = "kbdstyle"
        var arr = keySets.language.split("{}");
        console.log("onCompleted:",arr,keySets.language, keySets.backImage);
        VirtualKeyboardSettings.activeLocales = arr

    }





}

标签:换肤,set,qt,parent,width,visible,移除,input,NumberAnimation
来源: https://blog.csdn.net/qq_37997682/article/details/122148875

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有