Qt5.13.0虚拟键盘 使用文档说明及函数说明 (四)技术指南 Technicaly-Guide

此文档说明可以说是涵盖了绝大部分的键盘配置以及修改的问题,如果我一开始就看这,根本没必要走那么多弯路。~~~~(>_<)~~~~  记得自己找不到某个功能接口,还要每个源码文件看一遍。 总共20w行,为此我还对比了一下公司的代码。噢,才18w行,那没事了。 看得头晕属实

之前是以前开篇时的想法。常言说,人一时一个样,总是改改变变。以前想着天天做虚拟键盘,看源码,觉得头晕脑胀,睡觉眼皮都在跳,觉得没学到什么。现在回想之前了,天天加android的需求,改之前留下的shit;又改c#,杂乱无章,上面总是说的同一句话,这跟“C”差不多;我也不得不接。现在觉得还是以前学得多啊。最后的现在,这项目最后也不是我接手了,也不归我管控,全看上级安排了,因为按公司的环境上这个还有很长的路,我一个人也推不动,也就放了。原本想理清一下源码,以后不知道还写不写


目录

基本概念

输入上下文

上下文信息

语言环境

Input Engine(输入引擎)

Input Method(输入法)

虚拟键盘扩展插件

添加键盘布局

实现自定义输入法

分配选择列表 Selection Lists

更新选择列表

填充选择列表中的项

响应用户操作

键盘布局

布局类型

添加新的键盘布局

关键尺寸计算

选择键

风格和布局

具有多页键的键盘布局

手写键盘布局

添加自定义布局

键盘风格

添加自定义样式

使用QQuickWidget的Qt虚拟键盘


相关链接:

使用文档说明及函数说明 (一)构建 build

使用文档说明及函数说明 (二)部署指南 deployment-guide

使用文档说明及函数说明 (三)手写支持 Handwriting


文件:\qtvirtualkeyboard-5.13\src\virtualkeyboard\doc\srctechnical-guide.qdoc

搜索:Technical Guide

 

本文档提供Qt虚拟键盘插件的技术概述。



基本概念

Qt虚拟键盘项目是一个Qt 5输入上下文插件,它实现QPlatformInputContextPlugin和QPlatformInputContext接口。这些接口允许插件作为Qt 5应用程序的平台输入上下文插件使用。

插件本身提供了一个支持多种输入方法的输入框架,以及一个用于虚拟键盘的QML UI。输入框架通过插件接口是可扩展的,允许在运行时加载第三方输入法和键盘布局。

输入框架提供以下主要接口:

QVirtualKeyboardInputContext: 为虚拟键盘和其他输入组件提供上下文信息。充当底层文本输入组件的接口/场景。(用户与键盘的事件/状态交互)

QVirtualKeyboardInputEngine:公开一个API来集成用户输入事件(按键事件等),并充当输入方法的主机。(as a host)负责将输入事件路由(route或分配?)到输入方法(InputMethod)

QVirtualKeyboardAbstractInputMethod:基于c++的输入方法的基类型。输入法通常处理按键事件,但也可以处理鼠标和触摸输入事件。

InputMethod:基于qml的输入方法的基类。输入法通常处理按键事件,但也可以处理鼠标和触摸输入事件。并且允许您创建一个可分配给InputEngine的自定义输入方法。

QVirtualKeyboardExtensionPlugin:提供额外功能的虚拟键盘扩展插件接口。虚拟键盘在启动时加载所有的扩展插件。它搜索plugins/virtualkeyboard目录并匹配在插件中找到的元数据。如果有两个或多个具有相同名称的扩展插件,它将加载版本号最高的那个。

输入上下文

输入上下文由键盘和具体的输入法使用。InputContext是一个由QML托管的单例实例。应用程序不应该直接与输入上下文交互。(而是通过QVirtualKeyboardInputEngine)

上下文信息

输入上下文提供对来自应用程序的上下文信息的访问。这些信息包括但不限于:

InputContext::cursorPosition
InputContext::cursorRectangle
InputContext::inputMethodHints
InputContext::preeditText
InputContext::selectedText
InputContext::surroundingText 

语言环境

受支持的地区列表由“layouts/*”(5.12目录:qtvirtualkeyboard-5.13\src\virtualkeyboard\content\layouts )中的地区特定布局目录指定。每个布局目录可以包含一个或多个布局,例如fi_FI/main.qml或symbols.qml(刚好没有symbols?其他有的有)。如果特定于区域设置的布局与fallback区域设置没有不同,那么可以使用占位符文件<Layout type>,为Layout添加fallback。这将指定可以使用fallback layout的虚拟键盘。

布局目录至少必须包含以下的文件:

dialpad.fallback
digits.fallback
main.fallback
numbers.fallback
symbols.fallback

应用程序可以通过更改默认语言环境来指定初始布局。然而,这需要在应用程序初始化加载输入法插件之前完成。如果没有对默认语言环境进行任何更改,则使用当前系统语言环境。(更改默认的语言环境,这样就不必在每次重启软件/程序都是默认的英文)

键盘的设置匹配按如下顺序执行:

  1. layouts/ <语言> _ <国家>
  2. layouts/ <语言> _ *
  3. layouts/ en_GB

首先匹配完整的区域设置名称。如果没有找到完整的匹配,那么只匹配语言环境。如果没有找到部分匹配,则使用“en_GB”地区作为回退。

完成区域设置选择后,键盘更新输入区域设置和输入方向以匹配当前布局。应用程序可以通过QInputMethod接口接收这些信息。

在内部,当前的输入语言环境也被更新为QVirtualKeyboardInputEngine和当前的输入方法实例。

Input Engine(输入引擎)

输入引擎对象由InputContext拥有。与InputContext一样,只有一个QVirtualKeyboardInputEngine实例。输入引擎包含一些API函数,键盘使用这些函数将用户交互(例如按键和释放事件)映射到输入法。

例如,通过以下方法映射虚拟键盘键事件:

QVirtualKeyboardInputEngine: virtualKeyPress

QVirtualKeyboardInputEngine: virtualKeyRelease

上述方法用于集成虚拟键盘,因此方法名称中有“virtual”一词。这也意味着这些方法不适合映射物理击键。这是因为只有在释放键时才会执行实际操作。

如果在按键(Press)事件之前按键(Release)被中断,那么键盘将调用QVirtualKeyboardInputEngine::virtualKeyCancel方法。

Input Method(输入法)

输入法是按键处理程序的具体实现。它的主要功能是处理按键事件和维护用户输入的状态信息。它通过QVirtualKeyboardInputContext中预先编辑的文本按键事件,与文本编辑器进行交互。

输入法实例可以通过多种方式创建,具体取决于用例:

  1. KeyboardLayout::inputMethod:键盘布局可以单独为这个键盘布局创建一个输入法实例。需要注意的是,当键盘布局改变时,这个实例将被销毁。因此,这种方法通常仅限于非常狭窄的用例。
  2. KeyboardLayout::createInputMethod():键盘布局可以动态创建一个输入法,该输入法可用于此布局,也可用于
    shared layouts(例如,符号
  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值