嵌入式linux下使用qt virtualkeyboard

作者使用的是qt5.6版本,一开始以为5.6不支持虚拟键盘,因为在官方网站上下载的源代码编不过,但是后来灵机一动,找到了github上的qt仓库,顺利下载了qt5.6版本的虚拟键盘,一次性编译通过。

github地址:

https://github.com/qt/qtvirtualkeyboard/tree/5.6


编译和部署过程可以参照qt官方文档:

http://doc.qt.io/qt-5/qtvirtualkeyboard-index.html

简单地说就是qmake,make ,make install.就可以了

然后在引用虚拟键盘的时候需要在main函数加入

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

这段语言。

然后在你的程序中加入textField ,我这里用的是qml,如果是widget应该是lineEdit.

我显示在windows下测试的,现象很完美,点击textfield之后,虚拟键盘就弹出了。

然后我将程序部署到嵌入式linux下,运行之后,崩溃。键盘没有弹出。程序直接崩溃。

报错:

Application stops with 'EGLFS: OpenGL windows cannot be mixed with others.'

这句话的意思是opengl下不可以弹出多个window,虚拟键盘是一个新的窗口,所以崩溃了。

官方的解释如下:

OpenGL and Qt Quick 2 applications can only have one fullscreen window existing at a time. Trying to create another OpenGL window, or trying to mix an OpenGL window with a raster one will display the above message and abort the application.

Note: For raster windows (software rendered content based on QWidget or QPainter), there is no such limitation.


说明widget是不受此影响的,只有opengl受影响。

然后google了一下,找到了方法,就是让虚拟键盘不要新开一个窗口,而是在原来的窗口中出现,代码如下:

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
    }
}

需要指出的是这里import路径每个版本是不一样的,qt5.6就不是这个路径,如果这么写会报错,qt5.6的路径是:

import QtQuick.Enterprise.VirtualKeyboard 2.0

用inputpanel来装载虚拟键盘,就不会崩溃了。

附一张虚拟键盘在板子上的照片:



效果是不是很赞?

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值