This document describes how to deploy and use the Qt Virtual Keyboard plugin with Qt applications.
The various Qt Virtual Keyboard plugins and files are deployed in the following locations:
Item | Desktop install path | Boot2Qt install path |
---|---|---|
qtvirtualkeyboardplugin platform input context plugin | <QT_INSTALL_PLUGINS>/platforminputcontexts |
/system/plugins/platforminputcontexts |
qtvkbplugin QML plugin | <QT_INSTALL_QML>/QtQuick/VirtualKeyboard |
/system/qml/QtQuick/VirtualKeyboard |
qtvkbcomponentsplugin QML plugin | <QT_INSTALL_QML>/QtQuick/VirtualKeyboard/Components |
/system/qml/QtQuick/VirtualKeyboard/Components |
qtvkblayoutsplugin QML plugin | <QT_INSTALL_QML>/QtQuick/VirtualKeyboard/Layouts |
/system/qml/QtQuick/VirtualKeyboard/Layouts |
qtvkbpluginsplugin QML plugin | <QT_INSTALL_QML>/QtQuick/VirtualKeyboard/Plugins |
/system/qml/QtQuick/VirtualKeyboard/Plugins |
extension QML plugins | <QT_INSTALL_QML>/QtQuick/VirtualKeyboard/Plugins/* |
/system/qml/QtQuick/VirtualKeyboard/Plugins/* |
qtvkbsettingsplugin QML plugin | <QT_INSTALL_QML>/QtQuick/VirtualKeyboard/Settings |
/system/qml/QtQuick/VirtualKeyboard/Settings |
qtvkbstylesplugin QML plugin | <QT_INSTALL_QML>/QtQuick/VirtualKeyboard/Styles |
/system/qml/QtQuick/VirtualKeyboard/Styles |
Virtual keyboard data | <QT_INSTALL_DATA>/qtvirtualkeyboard |
/system/qtvirtualkeyboard |
Read more at Deploying Qt's Libraries.
Qt Virtual Keyboard currently supports two alternative integration methods for using the plugin:
Desktop
: requires no changes to existing applications. The virtual keyboard is available to all Qt applications in the system.
In this integration method, the keyboard is shown in a dedicated top-level window.
Application
: the virtual keyboard is embedded within the Qt application itself by instantiating an InputPanel item in QML.
This method is mandatory in environments where there is no support for multiple top-level windows (such as embedded devices), but can be used in desktop applications too.
This method can also be used by Qt Wayland compositors in order to provide a server-side virtual keyboard. See the section below for details.
The integration method is automatically selected by the project files. However, in desktop environments, it is possible to override the desktop integration method and use the application integration method instead, by using
the QT_VIRTUALKEYBOARD_DESKTOP_DISABLE
environment variable, or by adding -no-vkb-desktop
to the configure
command line.
This section explains how to use Qt Virtual Keyboard to interact with the Qt Widgets Line Edits example using the Pure QML example as a compositor.
We will be using Ubuntu 18.04 to run the example, using the X11 as the windowing system. The example compositor (pure-qml
) will open as a window within an X11 session.
QT_XCB_GL_INTEGRATION=xcb_egl QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=xcomposite-egl QT_IM_MODULE=qtvirtualkeyboard ./pure-qml -platform xcb
unset QT_IM_MODULE
./lineedits -platform wayland
If issues are encountered, the following environment variables can be set when running the compositor to get debug output that can help diagnose the issue:
WAYLAND_DEBUG=1 QT_LOGGING_RULES="qt.virtualkeyboard=true;qt.qpa.wayland*=true"
In both integration methods, the application must use the QT_IM_MODULE
environment variable to load the plugin. For example:
$ QT_IM_MODULE=qtvirtualkeyboard myapp
or in the main() function:
qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
In the desktop integration method, this step is all that is required to use Qt Virtual Keyboard. In the application integration method, the application is required to create an instance of InputPanel as explained in the following chapter.
The following example shows how to create an InputPanel and how to divide the screen area with the application container.
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 } }
The input panel must be a sibling element next to the application container. It is important not to put the input panel within the application container, as it would then overlap with the contents of the application. Also, the input panel height will be automatically updated according to the available width; the aspect ratio of the input panel is constant.
There are several environment variables defined by the module that are listed below:
Variable | Purpose |
---|---|
QT_VIRTUALKEYBOARD_HUNSPELL_DATA_PATH |
Overrides the location of the Hunspell data files.
The default location depends on the value of See Hunspell Integration for more information. |
QT_VIRTUALKEYBOARD_PINYIN_DICTIONARY |
Overrides the location of the Pinyin dictionary.
By default, the dictionary is bundled into the plugin's resources. To disable resource bundling, add -vkb-no-bundle-pinyin to the Qt configure command line. In this scenario, the default location depends on the value of |
QT_VIRTUALKEYBOARD_CANGJIE_DICTIONARY |
Overrides the location of the Cangjie dictionary.
By default, the dictionary is bundled into the plugin's resources. To disable resource bundling, add -vkb-no-bundle-tcime to the Qt configure command line. In this scenario, the default location depends on the value of |
QT_VIRTUALKEYBOARD_ZHUYIN_DICTIONARY |
Overrides the location of the Zhuyin dictionary.
By default, the dictionary is bundled into the plugin's resources. To disable resource bundling, add -vkb-no-bundle-tcime to the Qt configure command line. In this scenario, the default location depends on the value of |
QT_VIRTUALKEYBOARD_PHRASE_DICTIONARY |
Overrides the location of the phrase dictionary.
By default, the dictionary is bundled into the plugin's resources. To disable resource bundling, add -vkb-no-bundle-tcime to the Qt configure command line. In this scenario, the default location depends on the value of |
QT_VIRTUALKEYBOARD_CERENCE_HWR_DB_PATH |
Specifies the location of Cerence Handwriting handwriting database.
The default search location for Cerence Handwriting handwriting database are:
The environment variable may contain multiple paths. Multiple paths are separated with semicolon in Windows and with colon in other operating systems. |
QT_VIRTUALKEYBOARD_XT9_LDB_PATH |
Specifies the location of XT9 databases.
The default search location for LDB files are:
Additional search paths can be specified by setting this environment variable. Multiple paths are separated with semicolon in Windows and with colon in other operating systems. The LDB files are shared between XT9 and Cerence Handwriting plugins, so this environment variable affects both plugins. |
QT_VIRTUALKEYBOARD_STYLE |
Specifies the location of the style to use with the virtual keyboard.
This can also be specified in QML by setting VirtualKeyboardSettings::styleName, or at build time by using the Configuration Options. |
QT_VIRTUALKEYBOARD_LAYOUT_PATH | Specifies the location of the layouts to be used with the virtual keyboard. |
QT_VIRTUALKEYBOARD_DESKTOP_DISABLE | Disables the desktop integration method. |
QT_VIRTUALKEYBOARD_FORCE_EVENTS_WITHOUT_FOCUS |
Enables Qt Virtual Keyboard to send key events and use Shift key without having any text input in focus.
This variable needs to be explicitly set in the run environment of an application that wants to benefit from this. Using qputenv() in the application itself is not sufficient. |