Qt QML使用虚拟键盘的示例代码

 更新时间:2024年01月04日 10:36:38   作者:信必诺  
这篇文章主要为大家详细介绍了Qt QML使用虚拟键盘的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

示例效果

使用"虚拟键盘"注意 (例子的Qt版本:5.12.4)

注意一:

/* 必须在main.cpp开始处加入如下代码,否则无法使用"虚拟键盘" */
qputenv(“QT_IM_MODULE”,QByteArray(“qtvirtualkeyboard”));

注意二:

键盘大小是根据宽度自动计算的,所以,应用程序应该只设置InputPanel 的宽度和y 坐标,不能设置高度。

源码

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    // 必须加入否则无法使用"虚拟键盘"
    qputenv("QT_IM_MODULE",QByteArray("qtvirtualkeyboard"));

    QGuiApplication app(argc, argv);

    QQmlApplicationEngine engine;
    const QUrl url(QStringLiteral("qrc:/main.qml"));
    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}

main.qml

import QtQuick 2.12
import QtQuick.Window 2.12
import QtQuick.Layouts 1.12
import QtQuick.Controls 2.5

import QtQuick.VirtualKeyboard 2.2
import QtQuick.VirtualKeyboard.Settings 2.2

Window
{
    id: root
    visible: true
    width: 800
    height: 600
    title: qsTr("Hello World")

    ColumnLayout
    {
        anchors.top: parent.top
        anchors.topMargin: root.height * 0.2
        anchors.horizontalCenter: parent.horizontalCenter
        spacing: 25

        RowLayout
        {
            spacing: 25

            Text
            {
                text: qsTr("用户名:")
                font.family: "微软雅黑"
                font.pixelSize: 20
            }
            TextField
            {
                placeholderText: "输入用户名.."
                font.family: "微软雅黑"
                font.pixelSize: 16
                Layout.preferredWidth: root.width * 0.25

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

        RowLayout
        {
            spacing: 25

            Text
            {
                text: qsTr("密   码:")
                font.family: "微软雅黑"
                font.pixelSize: 20
            }
            TextField
            {
                placeholderText: "输入密码.."
                font.family: "微软雅黑"
                font.pixelSize: 16
                Layout.preferredWidth: root.width * 0.25

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

    InputPanel
    {
        id: inputPannelID
        z: 99
        y: root.height      // 默认让其处于窗口最下方,貌似隐藏一样
        width: root.width
        visible: true       // 一直显示

        states: State 
        {
            name: "visible"
            when: inputPannelID.active
            PropertyChanges 
            {
                target: inputPannelID
                y: root.height-inputPannelID.height
            }
        }
        transitions: Transition 
        {
            from: ""
            to: "visible"
            reversible: true
            ParallelAnimation 
            {
                NumberAnimation 
                {
                    properties: "y"
                    duration: 250
                    easing.type: Easing.InOutQuad
                }
            }
        }


        Component.onCompleted:
        {
            VirtualKeyboardSettings.styleName = "retro"                         // 复古样式
            VirtualKeyboardSettings.wordCandidateList.alwaysVisible = true
            VirtualKeyboardSettings.activeLocales = ["en_US","zh_CN","ja_JP"]   // 英语、中文、日语 (若不设置,则语言就有很多种)
        }
    }
}

以上就是Qt QML使用虚拟键盘的示例代码的详细内容,更多关于Qt QML虚拟键盘的资料请关注脚本之家其它相关文章!

相关文章

  • 嵌入式C语言二级指针在链表中的应用

    嵌入式C语言二级指针在链表中的应用

    这篇文章主要为大家介绍了嵌入式C语言二级指针在链表中的应用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • 使用C++制作GC Server过程详解

    使用C++制作GC Server过程详解

    这篇文章主要介绍了使用C++制作GC Server过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • C++条件及循环语句的综合运用实例

    C++条件及循环语句的综合运用实例

    这篇文章主要介绍了C++条件及循环语句的综合运用实例,能够帮助C++初学者更好地掌握C++的逻辑语句用法,需要的朋友可以参考下
    2015-09-09
  • C++超详细梳理lambda和function的使用方法

    C++超详细梳理lambda和function的使用方法

    C++在C11标准中引入了匿名函数,即没有名字的临时函数,又称之为lambda表达式.lambda表达式 实质上是创建一个匿名函数/对象,这篇文章主要介绍了lambda和function的使用方法
    2022-08-08
  • 详解C++中的一维数组和二维数组

    详解C++中的一维数组和二维数组

    这篇文章主要介绍了详解C++中的一维数组和二维数组,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • C语言编程数据结构线性表之顺序表和链表原理分析

    C语言编程数据结构线性表之顺序表和链表原理分析

    本篇文章是C语言编程篇主要为大家介绍了C语言编程中的数据结构线性表,文中附含丰富的图文示例代码为大家详解了线性表中的顺序表和链表,有需要的朋友可以借鉴参考下
    2021-09-09
  • 简单谈谈C++ 头文件系列之(bitset)

    简单谈谈C++ 头文件系列之(bitset)

    我们要使用bitset,首先需要包含头文件bitset。和vector对象不一样的是bitset类型对象的区别仅在其长度而不在其类型。在定义bitset的时候,要明确bitset包含了多少位,须在尖括号内给出它的长度值。长度值必须定义为整形字面值常量或是已用常量值初始化的整型的const对象
    2017-02-02
  • win10环境下C++ vs2015编译opencv249的教程

    win10环境下C++ vs2015编译opencv249的教程

    这篇文章主要介绍了win10环境下C++ vs2015编译opencv249的教程,本文分步骤给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • C++利用代理模式实现远程代理,虚拟代理和保护代理

    C++利用代理模式实现远程代理,虚拟代理和保护代理

    今天给大家简单介绍代理模式,一个很简单的设计模式,旨在不改变原对象的情况下通过代理对象来控制对原对象的访问。代理模式根据具体情况还可以分为远程代理、虚拟代理、保护代理等,下面来介绍一下
    2023-04-04
  • C语言链表实现通讯录系统课程设计

    C语言链表实现通讯录系统课程设计

    这篇文章主要为大家详细介绍了C语言链表实现通讯录系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06

最新评论