当前位置: 首页 > news >正文

03-QTWebEngine中使用qtvirtualkeyboard

qt提供了 virtualKeyboard 虚拟键盘模块,只需要在在main函数中最开始加入这样一句就可以了

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

但是在使用的时候遇到了一些问题:

1、中文输入的时候没有输入提示

Qvirtualkeyboard使用及相关知识点_qtvirtualkeyboard-CSDN博客

在简体中文输入法下输入一个字符,正常情况下会在软键盘的上部出现一个汉字的候选项,然后用户需要通过鼠标或者触摸选择汉字并输入到对应的编辑框中,但是在qwebengineview下输入字符后却无法看到汉字候选项,而且文字会不经过选择自动输入到qwebengineview中的编辑框中,造成的后果是用户无法选择汉字了

解决方法:参考上面链接,修改 qtvirtualkeyboard-everywhere-src-5.15.2 的源码,然后重新编译

可以在qvirtualkeyboardinputcontext_p.cpp中的
void QVirtualKeyboardInputContextPrivate::update(Qt::InputMethodQueries queries)函数中,注释掉
// update input engine
if ((newSurroundingText || newCursorPosition) &&
!testState(State::InputMethodEvent)) {
commit();
}
中的commit();语句即可,然后重新编译即可

2、键盘退出的时候发生段错误

问题排查:开始qtWeb浏览器程序是通过qtWidget调用 QWebEngine 控件来实现的,只是在main中加了 qputenv("QT_IM_MODULE", QByteArray("qtvirtualkeyboard")); 后面经排查发现只在 QWebEngine 中使用Qvirtualkeyboard 会有问题,在其他的比如 QMainWindow、QWidget中使用 Qvirtualkeyboard 都没问题。只能在QtQuick中使用WebEngineView控件来开启浏览器,而且要定义InputPanel才可以!!猜测可能是QTWidget的QWebEngine控件对QMl的Qvirtualkeyboard控件支持不好的原因吧!

下面是在QtQuick中使用WebEngineView控件来启动浏览器,使用InputPanel虚拟键盘

ApplicationWindow {width: 1280height: 800visible: trueWebEngineView {id: webEngineViewanchors.fill: parenturl: "https://www.baidu.com"onNewViewRequested: {console.log(request.requestedUrl)url = request.requestedUrl}// // 加载完成后触发打印为 PDF// onLoadingChanged: {//     if (loadRequest.status === WebEngineView.LoadSucceededStatus) {//         webEngineView.printToPdf("output.pdf")//     }// }onLinkHovered: {}}InputPanel {id: inputPanelz: 99x: 0y: parent.heightwidth: parent.width// externalLanguageSwitchEnabled:truestates: State {name: "visible"when: inputPanel.activePropertyChanges {target: inputPanely: parent.height - inputPanel.height}}transitions: Transition {from: ""to: "visible"reversible: trueParallelAnimation {NumberAnimation {properties: "y"duration: 250easing.type: Easing.InOutQuad}}}onActiveChanged: {//当输入框活跃状态改变的时候}Component.onCompleted: {// VirtualKeyboardSettings.styleName = "retro"VirtualKeyboardSettings.activeLocales = ["en_US", "zh_CN"]}}
}

http://www.lryc.cn/news/378025.html

相关文章:

  • leetcode3无重复字符的最长字串(重点讲滑动窗口)
  • Gobject tutorial 八
  • DDMA信号处理以及数据处理的流程---cfar检测
  • 【机器学习】从理论到实践:决策树算法在机器学习中的应用与实现
  • Zookeeper 集群节点故障剔除、切换、恢复原理
  • 解决帝国cms栏目管理拼音乱码的问题
  • Git快速入门
  • 【18.0】JavaScript---事件案例
  • 推荐系统三十六式学习笔记:原理篇.矩阵分解12|如果关注排序效果,那么这个模型可以帮到你
  • Kafka之ISR机制的理解
  • 如何设计一个点赞系统
  • 对象存储测试工具-s3cmd
  • OpenCV--图像色彩空间及转换
  • RIP解决不连续子网问题
  • 动态轮换代理IP是什么?有什么用?
  • MAC配置VScode中C++项目debug环境
  • PostgreSQL源码分析——CREATE CAST
  • 解锁5G新营销:视频短信的优势与全方位推广策略
  • 视频监控平台功能:国外的硬盘录像机NVR通过ISUP协议(原ehome协议)接入AS-V1000视频平台
  • PostgreSQL查询用户
  • 力扣1539.第k个缺失的正整数
  • 如何快速解决屏幕适配问题
  • Go基础编程 - 09 - 通道(channel)
  • [SAP ABAP] 数据类型
  • 什么是Vue开发技术
  • 【QT】
  • 【转载】使用 .NET Upgrade Assistant(升级助手)升级 .NET 老旧版本项目
  • SpringBoot如何自定义启动Banner 以及自定义启动项目控制台输出信息 类似于若依启动大佛 制作教程
  • 访问控制列表(Access Control Lists,ACL)与哈希查找的爱恨情怨
  • 一文讲清楚分销裂变是什么?怎么做好分销裂变?【附案例】