构建Qt Virtual Keyboard

概述

本文档介绍如何构建Qt Virtual Keyboard 插件。

该项目分为以下子项目:

examples/virtualkeyboard/basicQt Virtual Keyboard 演示应用程序
src/components/Qt Virtual Keyboard Components QML 插件 ( . .Components)QtQuickVirtualKeyboard
src/plugin/Qt Virtual Keyboard 平台输入上下文插件。该插件提供 QPlatformInputContext 接口,是 QML 输入上下文与平台之间的一个层。
src/plugins/包含Qt Virtual Keyboard 插件 (QtQuick.VirtualKeyboard.Plugins) 的目录,这些插件实现了复杂的输入方法,如HunspellInputMethod。构建时配置指定在运行时构建和加载哪些插件。
src/settings/Qt Virtual Keyboard Settings QML 插件 ( . .Settings)。该插件为虚拟键盘提供了可由应用程序配置的设置。QtQuickVirtualKeyboard
src/styles/Qt Virtual Keyboard Styles QML 插件 ( . .Styles)。QtQuickVirtualKeyboard
src/virtualkeyboard/Qt Virtual Keyboard 模块和 QML 插件。

配置选项

下表包含用于配置虚拟键盘功能的顶级选项。这些选项将传递给配置工具。

选项参数说明说明
-vkb-enable <code>[,<code>]*" 支持的语言代码或 "全部"支持的语言代码或 "全部启用指定语言使用该选项可以明确启用指定的语言。每个语言代码的格式为language[_country],其中
  • language是小写的双字母 ISO 639 语言代码
  • country是大写的双字母 ISO 3166 国家代码

该选项可用于根据需要定义语言支持。虚拟键盘可同时支持一种或多种语言。

例如,-vkb-enable de_DE,fi_FI 可支持德语和芬兰语。

如果未指定其他语言,虚拟键盘会自动包含所有支持的语言。

-vkb-手写[no|example-hwr|myscript-hwr|cerence-hwr] 启用或禁用手写输入。启用或禁用手写输入该标记用于启用手写输入。默认情况下,如果该引擎位于适当的插件文件夹中,即使不使用该选项也会自动激活。但是,如果 MyScript 和 Cerence SDK 同时存在,则必须配置 [no|myscript-hwr|cerence-hwr] 中的一个。example-hwr选项需要明确激活。这可用于开发和测试目的。
[-no]-vkb-arrow-keynavigation启用或禁用键盘箭头键导航允许使用箭头键和回车键控制键盘。该功能默认为关闭。
-vkb-风格标准选择虚拟键盘的样式Qt Virtual Keyboard 支持标准和复古两种风格。这两种风格都将包含在软件包中,但该选项允许您更改内置的默认风格。
[-no]-vkb-cangjie启用或禁用繁体中文仓颉输入法。此选项可启用或禁用繁体中文仓颉输入法。如果启用了繁体中文支持,则默认启用该输入法。
[-no]-vkb-zhuyin启用或禁用繁体中文的注音输入法。此选项可启用或禁用繁体中文的注音输入法。如果启用了对繁体中文的支持,则默认启用该输入法。
[-no]-vkb-desktop启用或禁用桌面集成默认情况下,当目标环境为 X11 或 Windows 桌面时,将启用桌面集成。使用该选项可以禁用桌面集成。

注意: 对于嵌入式集成,即InputPanel 由应用程序即时生成,无需明确使用此选项。如果应用程序在焦点设置为输入字段之前创建了InputPanel ,虚拟键盘将不会创建桌面输入面板。

[-no]-vkb-layouts启用或禁用内置布局默认情况下,虚拟键盘插件包含英文键盘布局。指定-no-vkb-layouts 后,虚拟键盘插件将不包含内置布局。

注意: 在这种情况下,运行应用程序前应将QT_VIRTUALKEYBOARD_LAYOUT_PATH 环境变量设置为包含自定义键盘布局的文件系统目录。

-vkb-hunspell[无|第三方|系统]选择 Hunspell 集成强制指定 Hunspell 集成方法。第 3 方选项选择使用虚拟键盘 repo 中的项目文件本地构建 Hunspell 源代码。该选项要求将 Hunspell git 仓库克隆到src/plugins/hunspell/3rdparty/hunspell目录中。system选项通过pkg-config 选择系统软件包。no选项会禁用 Hunspell 插件。
-vkb-no-bundle-pinyin不适用禁用捆绑拼音资源该选项将拼音资源排除在插件二进制文件之外。该选项可用于减小插件二进制文件的大小。
-vkb-no-bundle-tcime不适用禁止捆绑 tcime 资源该选项将 tcime 资源排除在插件二进制文件之外。该选项可用于减小插件二进制文件的大小。
-vkb-cerence-sdkpath/to/cerence/sdk配置 Cerence SDK 位置并启用 Cerence 手写和 XT9 集成。必须使用src/plugins/cerence/unpack.py脚本解压 Cerence SDK 压缩文件。默认情况下,SDK 会被解压到src/plugins/cerence/sdk,以便构建脚本自动获取。不过,通过使用 unpack.py 脚本的第二个参数,可以将 SDK 放在不同的位置。在这种情况下,必须使用 -vkb-cerence-sdk 命令行参数将位置传递给编译脚本。
-vkb-cerence-static手写启用 Cerence 手写引擎的静态链接。默认情况下,Cerence 手写引擎是动态链接的。使用-vkb-cerence-static可强制进行静态链接。
-vkb-bundle-cerence-hwr-vkb-bundle-cerence不适用启用捆绑 Cerence 手写资源该选项在插件二进制文件中捆绑 Cerence 手写资源。
-vkb-bundle-xt9-vkb-bundle-cerence不适用启用捆绑 XT9 资源该选项在插件二进制文件中捆绑 XT9 资源。
-vkb-myscript-sdkpath/to/myscript/sdk配置 MyScript 文本 SDK 的位置并启用 MyScript 手写集成。解压缩到src/plugins/myscript/sdk 的 MyScript 文本 SDK (zip) 可由构建脚本自动获取。不过,SDK 可以放在不同的位置。在这种情况下,必须使用-vkb-myscript-sdk 命令行参数将位置传递给编译脚本。
-vkb-myscript-arch[x86|x64|armv7hf|armv7|arm64]配置目标 CPU 架构MyScript Text SDK 为不同的 CPU 体系结构提供共享(动态)库:Linux 为[x86|x64|armv7hf|armv7|arm64],Windows 为[x86 | x64]。它可以自动配置。不过,用户也可以使用-vkb-myscript-arch 命令行参数指定目标 CPU 架构。

Hunspell 集成

默认情况下,除非找到 Hunspell 库和开发头文件,否则HunspellInputMethod将不可用。对于 Linux/X11 目标机,可以通过安装 libhunspell-dev 软件包来提供 Hunspell 库。另外,也可以将 Hunspell git 仓库克隆到src/plugins/hunspell/3rdparty/hunspell目录中。qmake 会自动检测源代码,并将项目配置为使用本地 Hunspell。如果使用的是 Hunspell 源,那么字典文件也必须复制到src/plugins/hunspell/3rdparty/hunspell/data目录中。

下面列出了设置 Hunspell 源和字典文件后目录结构的示例:

3rdparty
└── hunspell
    ├── data
    │   ├── en_GB.aff
    │   └── en_GB.dic
    ├── hunspell <-- Hunspell git repository
    └── CMakeLists.txt

Cerence 手写集成

Cerence 手写集成支持字母和中日韩(CJK)引擎。两个引擎均通过 T9WriteInputMethod 集成。输入法每次只初始化一个引擎。引擎选择会根据当前输入的本地语言自动进行。

Cerence 手写兼容性

Qt Virtual Keyboard 与 Cerence Handwriting v8.7 或更高版本兼容。

Cerence 手写软件构建准备

必须使用位于cerence目录中的unpack.py脚本解压 SDK 内容。这将确保 CMake 能找到正确的目录结构。

$ cd src/plugins/cerence/
$ python unpack.py filename.zip

这将把内容解压到src/plugins/cerence/sdk目录,CMake 会在该目录中自动提取。

或者,你也可以通过在命令行中添加额外参数,解压缩到任何其他目录。在这种情况下,SDK 的位置必须传递给configure脚本。

configure ... -vkb-cerence-sdk /path/to/cerence/sdk

Cerence SDK 的布局

SDK 的解压缩内容如下所示:

sdk
├───t9write
│   ├───api
│   ├───data
│   │   ├───arabic
│   │   ├───hebrew
│   │   └───thai
│   └───lib
│       ├───linux
│       │   ├───arm64
│       │   │   ├───shared
│       │   │   │   ├───alphabetic
│       │   │   │   └───cjk
│       │   │   └───static
│       │   │       ├───alphabetic
│       │   │       └───cjk
│       │   └───x86_64
│       │       ├───shared
│       │       │   ├───alphabetic
│       │       │   └───cjk
│       │       └───static
│       │           ├───alphabetic
│       │           └───cjk
│       └───win32
│           ├───x86
│           │   ├───shared
│           │   │   ├───alphabetic
│           │   │   └───cjk
│           │   └───static
│           │       ├───alphabetic
│           │       └───cjk
│           └───x86_64
│               ├───shared
│               │   ├───alphabetic
│               │   └───cjk
│               └───static
│                   ├───alphabetic
│                   └───cjk
└───xt9
    ├───api
    ├───data
    └───lib
        ├───linux
        │   ├───arm64
        │   │   ├───shared
        │   │   └───static
        │   └───x86_64
        │       ├───shared
        │       └───static
        └───win32
            ├───x86
            │   ├───shared
            │   └───static
            └───x86_64
                ├───shared
                └───static

每个目录的内容:

目录说明备注
应用程序接口此目录应包含所有 API 文件API 文件通常位于 SDK 的 "api "和 "public "目录下,但有时也会位于 "demo "目录下。

同时使用字母和中日韩引擎时,可从任一 SDK 复制任何重叠的文件。

数据该目录应包含所有 HWR 数据库和可选的 XT9 数据库。用于 Cerence 手写字母的 HWR 数据库:
  • _databas_le.bin

用于 Cerence 手写中日韩文字的 HWR 数据库:

  • cjk_HK_std_le.hdb香港中文
  • cjk_J_std_le.hdb日语
  • cjk_K_mkt_le.hdb韩文
  • cjk_S_gb18030_le.hdb简体中文
  • cjk_T_std_le.hdb繁体中文

语言数据库:

  • 文件扩展名为.ldb.phd
lib/<target>/<linkage>/<engine-variant>包含支持的目标构建的目录结构。这些目录应包含所需的目标库。如果同时找到共享库和静态库,则首选共享库。

检测到 Cerence SDK 时,会自动激活 Cerence 手写和 XT9 集成代码。

在构建 Cerence 扩展之前,应清除[qtbase]/plugins/virtualkeyboard目录中的所有其他扩展,以避免运行时出现冲突行为。Cerence 扩展不需要任何其他虚拟键盘插件即可运行。

XT9 的手写数据库和语言数据库安装在[qtbase]/qtvirtualkeyboard/cerence目录中。此外,还有其他两种定位这些文件的方法:

  • 环境变量定义的自定义运行时位置
  • 使用-vkb-bundle-cerence命令行选项在插件二进制文件中嵌入资源

MyScript Text SDK 集成

MyScript Text 专用于构建可识别手写文本的应用程序。MyScript Text 支持识别孤立字符、草书、印刷体和叠加文字。MyScript 叠加文字已集成到Qt Virtual Keyboard 中。它可以识别一个个重叠书写的字母、单词或部分单词,而无需明确区分连续的片段。它可以在内存和 CPU 有限的设备上运行。

MyScript 文本 SDK 的输入手写样式

最终用户可以在一个单词片段上书写另一个单词片段,或在一个字符上书写另一个字符,如下图所示。两个书写的单词之间会自动添加空格,因此无需明确的手势。

在一个字符上书写另一个字符
在其他字符上书写单词片段

MyScript 文本 SDK 的语言覆盖范围

MyScript Superimposed 支持 72 种语言。

MyScript 文本 SDK 软件包安装

MyScript 交付团队可为您提供包含各种.zip 存档的软件包。要访问构建自己的手写应用程序所需的所有代码、工具和资源,请将所有软件包解压缩到src/plugins/myscript/sdk相同的目标文件夹中,CMake 会自动将其提取出来。

或者,你也可以将软件包解压缩到任何其他目录下。在这种情况下,SDK 的位置必须传递给configure脚本。

configure ... -vkb-myscript-sdk /path/to/myscript/sdk

文件层次结构如下:

myscript
└── sdk
    ├─── conf
    ├─── doc
    ├─── edk
    ├─── engine
    │   └─── bin
    │       ├─── lin-arm64
    │       │   └─── *.so
    │       ├─── lin-armv7
    │       │   └─── *.so
    │       ├─── lin-armv7hf
    │       │   └─── *.so
    │       ├─── lin-x64
    │       │   └─── *.so
    │       ├─── lin-x86
    │       │   └─── *.so
    │       ├─── win-x64
    │       │   └─── *.dll
    │       ├─── win-x86
    │       │   └─── *.dll
    │       (etc.)
    ├─── rdk
    ├─── resources
    │   ├─── ar
    │   │   └─── *.res
    │   ├─── en_GB
    │   │   └─── *.res
    │   ├─── ja_JP
    │   │   └─── *.res
    │   ├─── ko_KR
    │   │   └─── *.res
    │   ├─── zh_CN
    │   │   └─── *.res
    │   (etc.)
    ├─── tools
    └─── voim
        ├─── api
        ├─── bin
        │   ├─── lin-arm64
        │   │   └─── *.so
        │   ├─── lin-armv7
        │   │   └─── *.so
        │   ├─── lin-armv7hf
        │   │   └─── *.so
        │   ├─── lin-x64
        │   │   └─── *.so
        │   ├─── lin-x86
        │   │   └─── *.so
        │   ├─── win-x64
        │   │   └─── *.dll
        │   ├─── win-x86
        │   │   └─── *.dll
        │   (etc.)
        └─── conf

每个目录的内容说明如下:

目录说明
conf包含引擎用于配置语言资源的语言配置文件。
doc包含 HTML 文档文件。文件index.html 显示主页面。
edk包含引擎开发工具包和手写编程元素,适用于每种支持的编程语言 API,包括代码示例。
引擎包含每个引擎对象的库,根据目标平台的不同,可以是 SO、A 或 DLL。
rdk包含资源开发工具包,即创建自定义资源的工具和示例。
资源包含扩展名为 /c .res 的资源文件。它们是不同 MyScript 技术在运行时使用的二进制资产,用于完成各种识别任务。
工具包含有用的程序员工具,包括用于墨水测试的 InkTool。
文本输入法包含 MyScript 文本输入法库。它是 MyScript 文本识别系统的扩展 SDK,旨在方便快捷地使用手写输入法。

设置 MyScript 文本 SDK 的证书

使用 MyScript Text SDK 必须要有有效的证书。这是一种安全措施,可唯一标识您是 MyScript 技术的合法客户。证书有助于 MyScript 跟踪客户的身份和已购买的产品。

证书通过[your_login].vo.zip package 发送。当您解压缩此软件包时,证书会自动放到相应的位置。这可确保证书在提供给您的服务和代码示例中即时运行。

如何使用 MyScript Text SDK 构建Qt Virtual Keyboard

MyScript 集成代码会在检测到 MyScript Text SDK 时自动激活。

MyScript Text SDK 的语言资源安装在[qtbase]/qtvirtualkeyboard/myscript目录中。

静态构建

虚拟键盘可针对应用程序静态构建和链接。这意味着 Qt 也是静态构建的(使用 configure 命令行中的 -static 选项)。

© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.