bb的地方:刷了一下题,突然发现忘了字符串结束符是啥了,就写了 ‘’ ,噢mygod ,搜了才看见是‘\0’ .发现自己越来越糟了。之前因为换qt系统到最后连内核编译配置全套都要自己慢慢弄了,哎,单单一个make menuconfigure感觉就要看个半天
本文档主要描述了如何在Qt 5应用程序中部署和使用Qt虚拟键盘插件(多在QML中),以及一些环境变量的设置
其他相关说明链接:
Qt5.13.0虚拟键盘 使用文档说明及函数说明 (一)构建 build
Qt5.13.0虚拟键盘 使用文档说明及函数说明 (三)手写支持 Handwriting
使用文档说明及函数说明 (四)技术指南 Technicaly-Guide
目录
部署指南
部署位置
集成方法(Integration Method)
Using Qt Virtual Keyboard with Qt Wayland
加载插件
创建 InputPanel
环境变量
deployment-guide.qdoc
搜索:Deployment Guide
各种Qt虚拟键盘插件和文件被部署在以下位置:
项目 item | 桌面安装位置 | Boot2Qt安装位置 |
---|---|---|
qtvirtualkeyboardplugin |
$$[QT_INSTALL_PLUGINS]/platforminputcontexts |
/system/plugins/platforminputcontexts |
qtvirtualkeyboardextensionplugin |
$$[QT_INSTALL_PLUGINS]/virtualkeyboard |
/system/plugins/virtualkeyboard |
qtvirtualkeyboardplugin QML files |
$$[QT_INSTALL_QML]/QtQuick/VirtualKeyboard |
/system/qml/QtQuick/VirtualKeyboard |
qtvirtualkeyboardstylesplugin |
$$[QT_INSTALL_QML]/QtQuick/VirtualKeyboard/Styles |
/system/qml/QtQuick/VirtualKeyboard/Styles |
Qt虚拟键盘目前支持两种可选的集成方法来使用插件:
Desktop:不需要更改现有的应用程序。
虚拟键盘可用于系统中的所有Qt 5应用程序。
在这种集成方法中,键盘显示在专用的顶级窗口(top-level window)中。
Application:虚拟键盘通过在QML中实例化一个 InputPanel项嵌入到Qt应用程序本身中。
此方法是强制性的(mandatory in environments),且不支持多个顶级窗口(如嵌入式设备),但也可以用于Deskop应用程序。
这个方法也可以被Qt的Wayland组合器用来提供一个服务器端虚拟键盘。有关详细信息,请参阅下面的部分。
集成方法由项目文件自动选择,如分为xcb(x11)以及其他。
switch (d->windowingSystem) {
case DesktopInputPanelPrivate::Xcb:
d->view->setFlags(d->view->flags() | Qt::Window | Qt::BypassWindowManagerHint);
break;
default:
d->view->setFlags(d->view->flags() | Qt::Tool);
break;
}
但是,在桌面环境中,可以通过将 CONFIG+=disable-desktop添加到 qmake命令行来覆盖desktop集成方法并使用application集成方法。
本节解释如何使用Qt虚拟键盘与Qt窗口小部件行编辑示例交互,使用纯QML示例作为组合器。
我们将使用Ubuntu 18.04运行这个例子,使用X11作为窗口系统。示例组合程序(pure-qml)将在X11会话中作为窗口打开。
(pure-qml该示例在qt里面找不到,想看源码的可以点https://code.qt.io/cgit/qt/qtwayland.git/tree/examples/wayland/pure-qml?h=5.13.0 都是QWayland的示例)
1、开始 compositor:
QT_XCB_GL_INTEGRATION=xcb_egl
QT_WAYLAND_CLIENT_BUFFER_INTEGRATION=xcomposite-egl
QT_IM_MODULE=qtvirtualkeyboard
./pure-qml -platform xcb
2、在运行客户端程序时,确保 QT_IM_MODULE 取消设置
unset QT_IM_MODULE
3、打开 Line Edits example 作为客户端
./lineedits -platform wayland
4、点击 line edit 然后虚拟键盘会打开
如果遇到问题,可以设置以下环境变量
当运行compositor 可以得到调试输出帮助诊断问题:
WAYLAND_DEBUG=1
QT_LOGGING_RULES="qt.virtualkeyboard=true;qt.qpa.wayland*=true"
在这两种集成方法中,应用程序必须使用QT_IM_MODULE
1、加载插件的环境变量。例如:
$ QT_IM_MODULE=qtvirtualkeyboard myapp
2、或者在 main() 函数:
qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard"));
在desktop集成方法中,这一步就是所需的全部。自带两种风格,默认是第一种炫酷科技(嘻嘻),第二种复古?(黄金shit)
在application集成方法中,应用程序需要创建InputPanel的实例,下面将对此进行说明。
下面的示例展示了如何创建InputPanel,以及如何使用应用程序容器划分屏幕区域。
import QtQuick 2.0
import QtQuick.VirtualKeyboard 2.1
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
}
}
InputPanel必须是应用程序容器旁边的兄弟元素。
重要的是不要将InputPanel放在应用程序容器中,因为它会与应用程序的内容重叠。
此外,InputPanel高度将根据可用宽度自动更新;InputPanel的长宽比是恒定的。
模块定义了如下几个环境变量:
QT_VIRTUALKEYBOARD_HUNSPELL_DATA_PATH
重写Hunspell数据文件的位置。
默认位置取决于{QLibraryInfo::location(QLibraryInfo::DataPath)}的值。
例如,对于从源代码构建的Qt库,它可以是 {qtbase/qtvirtualkeyboard/hunspell}。
有关更多信息,请参见{Hunspell Integration}。
QT_VIRTUALKEYBOARD_PINYIN_DICTIONARY
重写拼音字典的位置。
默认情况下,字典被绑定到插件的资源中。
要禁用资源绑定,可以在插件的qmake命令行中添加 CONFIG+=no-bundle-pinyin。在这个场景中,默认位置取决于{QLibraryInfo::location(QLibraryInfo::DataPath)}的值。
例如,对于从源代码构建的Qt库,它可以是 {qtbase/qtvirtualkeyboard/pinyin/ dict_pinyin.dat}。
QT_VIRTUALKEYBOARD_CANGJIE_DICTIONARY
重写仓颉字典的位置。
默认情况下,字典被绑定到插件的资源中。
要禁用资源绑定,请在插件的qmake命令行中添加 CONFIG+=no-bundle-tcime。在这个场景中,默认位置取决于{QLibraryInfo::location(QLibraryInfo::DataPath)}的值。
例如,对于从源代码构建的Qt库,它可以是 {qtbase/qtvirtualkeyboard/tcime/ dict_cangje .dat}。
QT_VIRTUALKEYBOARD_ZHUYIN_DICTIONARY
重写了Zhuyin字典的位置。
默认情况下,字典被绑定到插件的资源中。
要禁用资源绑定,请在插件的qmake命令行中添加 CONFIG+=no-bundle-tcime。在这个场景中,默认位置取决于 {QLibraryInfo::location(QLibraryInfo::DataPath)}的值。
例如,对于从源代码构建的Qt库,它可以是 {qtbase/qtvirtualkeyboard/tcime/dict_zhuyin.dat}。
QT_VIRTUALKEYBOARD_PHRASE_DICTIONARY
重写短语字典的位置。默认情况下,字典被绑定到插件的资源中。
要禁用资源绑定,请在插件的qmake命令行中添加\ CONFIG+=no-bundle-tcime。在这个场景中,默认位置取决于\c {QLibraryInfo::location(QLibraryInfo::DataPath)}的值。例如,对于从源代码构建的Qt库,它可以是\c {qtbase/qtvirtualkeyboard/tcime/dict_phrases.dat}。
QT_VIRTUALKEYBOARD_STYLE
指定要与虚拟键盘一起使用的样式的位置。也可以在QML中通过设置 {VirtualKeyboardSettings::styleName}来指定,或者在构建时通过使用{Advanced Configuration Options}{qmake Configuration Options}来指定。
QT_VIRTUALKEYBOARD_LAYOUT_PATH
指定与虚拟键盘一起使用的布局的位置。
LIPI_ROOT
指定lipi-toolkit的位置。默认位置取决于{QLibraryInfo::location(QLibraryInfo::DataPath)}的值。
例如,对于从源代码构建的Qt库,它可以是 {qtbase/qtvirtualkeyboard/lipi_toolkit}。
LIPI_LIB
指定lipi-toolkit插件的位置。默认位置取决于 LIPI_ROOT:
{LIPI_ROOT + "/lib"} if LIPI_ROOT is set.
{QLibraryInfo::location(QLibraryInfo::PluginsPath) + "/lipi_toolkit"} if LIPI_ROOT is not set.