首页 > 编程语言 >Qt QML使用虚拟键盘示例(附完整源码)

Qt QML使用虚拟键盘示例(附完整源码)

时间:2024-02-26 19:35:50浏览次数:14  
标签:main QtQuick Qt 示例 源码 import font root

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

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


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

源码

     main.cpp

 1 #include <QGuiApplication>
 2 #include <QQmlApplicationEngine>
 3 
 4 int main(int argc, char *argv[])
 5 {
 6     QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
 7 
 8     // 必须加入否则无法使用"虚拟键盘"
 9     qputenv("QT_IM_MODULE",QByteArray("qtvirtualkeyboard"));
10 
11     QGuiApplication app(argc, argv);
12 
13     QQmlApplicationEngine engine;
14     const QUrl url(QStringLiteral("qrc:/main.qml"));
15     QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
16                      &app, [url](QObject *obj, const QUrl &objUrl) {
17         if (!obj && url == objUrl)
18             QCoreApplication::exit(-1);
19     }, Qt::QueuedConnection);
20     engine.load(url);
21 
22     return app.exec();
23 }

main.qml

  1 import QtQuick 2.12
  2 import QtQuick.Window 2.12
  3 import QtQuick.Layouts 1.12
  4 import QtQuick.Controls 2.5
  5 
  6 import QtQuick.VirtualKeyboard 2.2
  7 import QtQuick.VirtualKeyboard.Settings 2.2
  8 
  9 Window
 10 {
 11     id: root
 12     visible: true
 13     width: 800
 14     height: 600
 15     title: qsTr("Hello World")
 16 
 17     ColumnLayout
 18     {
 19         anchors.top: parent.top
 20         anchors.topMargin: root.height * 0.2
 21         anchors.horizontalCenter: parent.horizontalCenter
 22         spacing: 25
 23 
 24         RowLayout
 25         {
 26             spacing: 25
 27 
 28             Text
 29             {
 30                 text: qsTr("用户名:")
 31                 font.family: "微软雅黑"
 32                 font.pixelSize: 20
 33             }
 34             TextField
 35             {
 36                 placeholderText: "输入用户名.."
 37                 font.family: "微软雅黑"
 38                 font.pixelSize: 16
 39                 Layout.preferredWidth: root.width * 0.25
 40 
 41                 background: Rectangle
 42                 {
 43                     radius: 4
 44                     border.color: parent.focus  ? "#498ff8" : "#C4DBFC"
 45                 }
 46             }
 47         }
 48 
 49         RowLayout
 50         {
 51             spacing: 25
 52 
 53             Text
 54             {
 55                 text: qsTr("密   码:")
 56                 font.family: "微软雅黑"
 57                 font.pixelSize: 20
 58             }
 59             TextField
 60             {
 61                 placeholderText: "输入密码.."
 62                 font.family: "微软雅黑"
 63                 font.pixelSize: 16
 64                 Layout.preferredWidth: root.width * 0.25
 65 
 66                 background: Rectangle
 67                 {
 68                     radius: 4
 69                     border.color: parent.focus  ? "#498ff8" : "#C4DBFC"
 70                 }
 71             }
 72         }
 73     }
 74 
 75     InputPanel
 76     {
 77         id: inputPannelID
 78         z: 99
 79         y: root.height      // 默认让其处于窗口最下方,貌似隐藏一样
 80         width: root.width
 81         visible: true       // 一直显示
 82 
 83         states: State 
 84         {
 85             name: "visible"
 86             when: inputPannelID.active
 87             PropertyChanges 
 88             {
 89                 target: inputPannelID
 90                 y: root.height-inputPannelID.height
 91             }
 92         }
 93         transitions: Transition 
 94         {
 95             from: ""
 96             to: "visible"
 97             reversible: true
 98             ParallelAnimation 
 99             {
100                 NumberAnimation 
101                 {
102                     properties: "y"
103                     duration: 250
104                     easing.type: Easing.InOutQuad
105                 }
106             }
107         }
108 
109 
110         Component.onCompleted:
111         {
112             VirtualKeyboardSettings.styleName = "retro"                         // 复古样式
113             VirtualKeyboardSettings.wordCandidateList.alwaysVisible = true
114             VirtualKeyboardSettings.activeLocales = ["en_US","zh_CN","ja_JP"]   // 英语、中文、日语 (若不设置,则语言就有很多种)
115         }
116     }
117 }

 

标签:main,QtQuick,Qt,示例,源码,import,font,root
From: https://www.cnblogs.com/ybqjymy/p/18035013

相关文章

  • Qt 常用基础设置
    //右键菜单无效setContextMenuPolicy(Qt::NoContextMenu);//设置窗口背景透明setAttribute(Qt::WA_TranslucentBackground);//设置外框隐藏setWindowFlag(Qt::FramelessWindowHint);//设置无焦点setFocusPolicy(Qt::NoFocus);//设置lineEdit未输入字时显示文字l......
  • QT多线程实现-----问题解决及实现方式
    一、概述恰巧正在做一个多线程通信的项目,具体功能是与下位机交互和文件发送,在子线程中实现命令发送和文件传输。使用movetothread主要遇到以下几个问题:1.Socketnotifierscannotbeenabledordisabledfromanotherthread。2.子线程完成文件传输,发送信号......
  • cloudreve源码来构建项目的脚手架
    接口中,定义serviceservice返回响应方法;//UserLogin用户登录funcUserLogin(c*gin.Context){varserviceuser.UserLoginServiceiferr:=c.ShouldBindJSON(&service);err==nil{res:=service.Login(c)c.JSON(200,res)......
  • Qt的拖拽操作例子
    本文是一个拖拽文本的例子。演示了如何把按钮的标题拖拽到文本编辑框里。Qt对拖拽的封装很好,QDrag对象简单易用。本文程序测试环境是VS2017和Qt5.9。下面是程序拖拽时的效果图,可以看出来拖拽的时候光标下方也显示了文本内容:头文件。本功能是在主窗口中实现的。下面代码里QtTest......
  • 项目实战:Qt监测操作系统cpu温度v1.1.0(支持windows、linux、国产麒麟系统)
    需求  使用Qt软件开发一个检测cpu温度的功能。  兼容windows、linux,国产麒麟系统(同为linux)Demo  windows上运行(需要管理员权限):    国产麒麟操作上运行(需要管理员权限):   功能描述v1.1.0windows上定时检测输出cpu温度。linux上定时检测输出cpu......
  • springBoot 整合 groovy 实现表达式解析 该示例可以用于配置告警规则
    1.引入pom<dependency><groupId>org.codehaus.groovy</groupId><artifactId>groovy</artifactId><version>3.0.9</version></dependency><dependency......
  • zookeeper源码(09)follower处理客户端请求
    在zookeeper中,follower也可以接收客户端连接,处理客户端请求,本文将分析follower处理客户端请求的流程:读请求处理写请求转发与响应follower接收转发客户端请求网络层接收客户端数据包leader、follower都会启动ServerCnxnFactory组件,用来接收客户端连接、读取客户端数据包、将......
  • 用QTimeLine实现滑动动画
    一般在Qt实现动画可以用QAbstractAnimation的子类实现。这里给出一个不一样的例子实现动画,即用QTimeLine实现。功能是有一个QStackedWidget,它有两个子页面。默认显示第一页。点击“动画”按钮播放一段动画使页面第一页滑动到第二页,然后切换到第二页。程序测试环境是VS2017和Qt5.9......
  • opencv android studio build.gradle修改为build.gradle.kts 文件示例
    注意将openCVersionName,openCVersionCode,compileSdk,minSdk进行相应的修改即可.plugins{id("com.android.library")id("org.jetbrains.kotlin.android")}valopenCVersionName="4.9.0"valopenCVersionCode=((4*100+9)*1......
  • 项目实战:Qt监测操作系统物理网卡通断v1.1.0(支持windows、linux、国产麒麟系统)
    需求  使用Qt软件开发一个检测网卡的功能。  兼容windows、linux,国产麒麟系统(同为linux)Demo  windows上运行:      国产麒麟操作上运行:     功能描述v1.1.0windows上实时检测出网卡通断(插拔,失联等情况)linux上实时检测出网卡通断(插拔,失联等......