部署指南

概述

本文档介绍如何在 Qt 应用程序中部署和使用Qt Virtual Keyboard 插件。

部署

各种Qt Virtual Keyboard 插件和文件部署在以下位置:

项目桌面安装路径Boot2Qt 安装路径
qtvirtualkeyboardplugin 平台输入上下文插件<QT_INSTALL_PLUGINS>/platforminputcontexts/system/plugins/platforminputcontexts
qtvkbplugin QML 插件<QT_INSTALL_QML>/QtQuick/VirtualKeyboard/system/qml/QtQuick/VirtualKeyboard
qtvkbcomponentsplugin QML 插件<QT_INSTALL_QML>/QtQuick/VirtualKeyboard/Components/system/qml/QtQuick/VirtualKeyboard/Components
qtvkblayoutsplugin QML 插件<QT_INSTALL_QML>/QtQuick/VirtualKeyboard/Layouts/system/qml/QtQuick/VirtualKeyboard/Layouts
qtvkbpluginsplugin QML 插件<QT_INSTALL_QML>/QtQuick/VirtualKeyboard/Plugins/system/qml/QtQuick/VirtualKeyboard/Plugins
扩展 QML 插件<QT_INSTALL_QML>/QtQuick/VirtualKeyboard/Plugins/*/system/qml/QtQuick/VirtualKeyboard/Plugins/*
qtvkbsettingsplugin QML 插件<QT_INSTALL_QML>/QtQuick/VirtualKeyboard/Settings/system/qml/QtQuick/VirtualKeyboard/Settings
qtvkbstylesplugin QML 插件<QT_INSTALL_QML>/QtQuick/VirtualKeyboard/Styles/system/qml/QtQuick/VirtualKeyboard/Styles
虚拟键盘数据<QT_INSTALL_DATA>/qtvirtualkeyboard/system/qtvirtualkeyboard

依赖关系

部署 Qt 库中阅读更多内容。

集成方法

Qt Virtual Keyboard Qtvkbstylesplugin 目前支持两种使用插件的集成方法:

  • Desktop虚拟键盘:无需更改现有应用程序。系统中的所有 Qt 应用程序均可使用虚拟键盘。

    在这种集成方法中,键盘显示在专用的顶层窗口中。

  • ApplicationQt Virtual Keyboard:通过在 Qt XML 中实例化一个InputPanel 项目,将虚拟键盘嵌入 Qt 应用程序本身。

    在不支持多个顶级窗口的环境(如嵌入式设备)中,必须使用这种方法,但也可用于桌面应用程序。

    Qt Wayland Compositor 也可使用此方法来提供服务器端虚拟键盘。详情请参阅下面的章节。

集成方法由项目文件自动选择。不过,在桌面环境中,可以通过使用QT_VIRTUALKEYBOARD_DESKTOP_DISABLE 环境变量或在configure 命令行中添加-no-vkb-desktop 来覆盖桌面集成方法,转而使用应用程序集成方法。

在 Qt Wayland 中使用Qt Virtual Keyboard

本节将介绍如何使用Qt Virtual KeyboardQt Widgets 行编辑示例进行交互,并将Fancy Compositor 示例用作合成器。

我们将使用 Ubuntu 18.04 运行该示例,并将 X11 作为窗口系统。示例编辑器 (fancy-compositor) 将作为 X11 会话中的一个窗口打开。

  1. 启动合成器
    QT_XCB_GL_INTEGRATION=xcb_egl QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=xcomposite-egl \
    QT_IM_MODULE=qtvirtualkeyboard ./fancy-compositor -platform xcb
  2. 在运行客户端程序之前,确保未设置 QT_IM_MODULE:
    unset QT_IM_MODULE
  3. 以客户端身份启动 "行编辑 "示例:
    ./lineedits -platform wayland
  4. 点击行编辑,打开Qt Virtual Keyboard 的输入面板。

如果遇到问题,可在运行合成器时设置以下环境变量,以获取调试输出,帮助诊断问题:

WAYLAND_DEBUG=1
QT_LOGGING_RULES="qt.virtualkeyboard=true;qt.qpa.wayland*=true"

加载插件

在两种集成方法中,应用程序都必须使用QT_IM_MODULE 环境变量来加载插件。例如

$ QT_IM_MODULE=qtvirtualkeyboard myapp

或在 main() 函数中:

qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));

在桌面集成方法中,使用Qt Virtual Keyboard 只需这一步。在应用程序集成方法中,应用程序需要创建InputPanel 的实例,如下章所述。

创建输入面板

下面的示例展示了如何创建InputPanel 以及如何用应用程序容器划分屏幕区域。

import QtQuick
import QtQuick.VirtualKeyboard

Item {
    id: root
    Item {
        id: appContainer
        anchors.left: parent.left
        anchors.top: parent.top
        anchors.right: parent.right
        anchors.bottom: inputPanel.top
        ...
    }
    InputPanel {
        id: inputPanel
        y: Qt.inputMethod.visible ? parent.height - inputPanel.height : parent.height
        anchors.left: parent.left
        anchors.right: parent.right
    }
}

输入面板必须是应用程序容器旁边的同级元素。重要的是,不要将输入面板放在应用程序容器内,因为这样会与应用程序的内容重叠。此外,输入面板的高度会根据可用宽度自动更新;输入面板的宽高比保持不变。

环境变量

模块定义了几个环境变量,如下所示:

变量目的
qt_virtualkeyboard_hunspell_data_path覆盖 Hunspell 数据文件的位置。

默认位置取决于QLibraryInfo::path(QLibraryInfo::DataPath) 的值。例如,对于从源代码构建的 Qt 库,它可以是qtbase/qtvirtualkeyboard/hunspell

更多信息请参见Hunspell Integration

qt_virtualkeyboard_pinyin_dictionary重设拼音字典的位置。

默认情况下,字典捆绑在插件的资源中。

要禁用资源捆绑,请在 Qt configure 命令行中添加-vkb-no-bundle-pinyin。在这种情况下,默认位置取决于QLibraryInfo::path(QLibraryInfo::DataPath) 的值。例如,对于从源代码构建的 Qt 库,它可能是qtbase/qtvirtualkeyboard/pinyin/dict_pinyin.dat

qt_virtualkeyboard_cangjie_dictionary重置仓颉字典的位置。

默认情况下,字典捆绑在插件的资源中。

要禁用资源捆绑,请在 Qt configure 命令行中添加-vkb-no-bundle-tcime。在这种情况下,默认位置取决于QLibraryInfo::path(QLibraryInfo::DataPath) 的值。例如,对于从源代码构建的 Qt 库,它可能是qtbase/qtvirtualkeyboard/tcime/dict_cangjie.dat

qt_virtualkeyboard_zhuyin_dictionary覆盖注音字典的位置。

默认情况下,字典捆绑在插件的资源中。

要禁用资源捆绑,请在 Qt configure 命令行中添加-vkb-no-bundle-tcime。在这种情况下,默认位置取决于QLibraryInfo::path(QLibraryInfo::DataPath) 的值。例如,对于从源代码构建的 Qt 库,可以是qtbase/qtvirtualkeyboard/tcime/dict_zhuyin.dat

qt_virtualkeyboard_phrase_dictionary重设短语字典的位置。

默认情况下,词典捆绑在插件资源中。

要禁用资源捆绑,请在 Qt configure 命令行中添加-vkb-no-bundle-tcime。在这种情况下,默认位置取决于QLibraryInfo::path(QLibraryInfo::DataPath) 的值。例如,对于从源代码构建的 Qt 库,可以是qtbase/qtvirtualkeyboard/tcime/dict_phrases.dat

qt_virtualkeyboard_cerence_hwr_db_path指定 Cerence Handwriting 手写数据库的位置。

Cerence 手写数据库的默认搜索位置为

  • QT_VIRTUALKEYBOARD_CERENCE_HWR_DB_PATH
  • QLibraryInfo::location(QLibraryInfo::DataPath) + "/qtvirtualkeyboard/cerence/handwriting"
  • ":/qt-project.org/imports/QtQuick/VirtualKeyboard/Cerence/Handwriting"

环境变量可包含多个路径。多个路径在 Windows 中用分号分隔,在其他操作系统中用冒号分隔。

qt_virtualkeyboard_xt9_ldb_path指定 XT9 数据库的位置。

LDB 文件的默认搜索位置是

  • QT_VIRTUALKEYBOARD_XT9_LDB_PATH
  • QLibraryInfo::location(QLibraryInfo::DataPath) + "/qtvirtualkeyboard/cerence/xt9"
  • ":/qt-project.org/imports/QtQuick/VirtualKeyboard/Cerence/Xt9"

可通过设置此环境变量指定其他搜索路径。多个路径在 Windows 中用分号分隔,在其他操作系统中用冒号分隔。

LDB 文件在 XT9 和 Cerence Handwriting 插件之间共享,因此此环境变量会影响这两个插件。

qt_virtualkeyboard_style指定虚拟键盘使用的样式的位置。

也可在 QML 中通过设置VirtualKeyboardSettings::styleName 或在构建时使用配置选项来指定。

qt_virtualkeyboard_layout_path指定虚拟键盘使用的布局位置。
qt_virtualkeyboard_desktop_disable禁用桌面集成方法。
qt_virtualkeyboard_force_events_without_focus使Qt Virtual Keyboard 能够在没有任何文本输入的情况下发送按键事件和使用 Shift 键。

需要在应用程序的运行环境中明确设置该变量,以便从中受益。在应用程序中使用qputenv() 是不够的。

© 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.