树莓派下QtVirtualkeyboard的编译与问题解决

树莓派下QtVirtualkeyboard的编译与问题解决,第1张

背景:

基于CM4开发的显示界面需要用到Virtualkeyboard模块,安装起来不顺利,记录备忘。


环境:

No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 10 (buster)
Release:        10
Codename:       buster

采用的PySide2基于python3开发的, Qt的版本为 5.11.3

参考连接:

python - Install QtVirtualkeyboard in raspberry-pi? - Stack Overflow

c++ - How to find the window that contains the QtVirtualKeyboard - Stack Overflow

/usr/bin/ld: cannot find -lGLESv2 · Issue #101 · MCMrARM/mcpelauncher-linux · GitHub

解决过程: 1、安装官网提供的例子在window上走一遍

        Qt Quick Virtual Keyboard

2、Pyside下Virtual Keyboard的使用

就是在 QApplication之前传个参数,代码如下

if __name__ == "__main__":
    os.environ["QT_IM_MODULE"] = "qtvirtualkeyboard"  # 导入虚拟键盘
    app = QApplication(sys.argv)

在qml中添加下面的引用?不加在输入区域获取焦点后默认会d出键盘,(大概是一开始传入了虚拟键盘的参数,输入默认被虚拟键盘接管了)由于功能满足,这块没细研究。


import QtQuick.VirtualKeyboard 2.1
3、树莓派下安装虚拟键盘
sudo apt-get install qml-module-qtquick-virtualkeyboard

这个不起作用,安装后没管它,继续找解决方案

4、编译安装virtualkeyboard
sudo apt-get update
sudo apt install git build-essential
sudo apt-get install python3-pyqt5 qt5-default qtdeclarative5-dev libqt5svg5-dev qtbase5-private-dev qml-module-qtquick-controls2 qml-module-qtquick-controls qml-module-qt-labs-folderlistmodel
sudo apt-get install '^libxcb.*-dev' libx11-xcb-dev libglu1-mesa-dev libxrender-dev libxi-dev libxkbcommon-dev libxkbcommon-x11-dev
git clone -b 5.11 https://github.com/qt/qtvirtualkeyboard.git
cd qtvirtualkeyboard
qmake 
sudo make
sudo make install
5、编译报错Cannot find GLESv2

解决方法:在make目录下添加软链接

sudo ln -s libbrcmEGL.so /opt/vc/lib/libEGL.so
sudo ln -s libbrcmGLESv2.so /opt/vc/lib/libGLESv2.so
sudo ln -s libbrcmOpenVG.so /opt/vc/lib/libOpenVG.so
sudo ln -s libbrcmWFC.so /opt/vc/lib/libWFC.so
6、编译后库存档

下载链接

Qtvirtualkeyboard在树莓派buster10下编译后库包-嵌入式文档类资源

7、测试新问题

虚拟键盘覆盖了整个屏幕

 8、解决
import os
import sys

from PySide2 import QtCore, QtGui, QtWidgets
# from PyQt5 import QtCore, QtGui, QtWidgets


def handleVisibleChanged():
    if not QtGui.QGuiApplication.inputMethod().isVisible():
        return
    for w in QtGui.QGuiApplication.allWindows():
        if w.metaObject().className() == "QtVirtualKeyboard::InputView":
            keyboard = w.findChild(QtCore.QObject, "keyboard")
            if keyboard is not None:
                r = w.geometry()
                r.moveTop(keyboard.property("y"))
                w.setMask(QtGui.QRegion(r))
                return


def main():
    os.environ["QT_IM_MODULE"] = "qtvirtualkeyboard"
    app = QtWidgets.QApplication(sys.argv)

    QtGui.QGuiApplication.inputMethod().visibleChanged.connect(handleVisibleChanged)

    w = QtWidgets.QLineEdit()
    w.show()
    sys.exit(app.exec_())


if __name__ == "__main__":
    main()

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/570260.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-09
下一篇 2022-04-09

发表评论

登录后才能评论

评论列表(0条)

保存