能交易的网站多少钱,项目名称,个人简历(电子版),网页设计购物网站建设qt提供了 virtualKeyboard 虚拟键盘模块#xff0c;只需要在在main函数中最开始加入这样一句就可以了
qputenv(QT_IM_MODULE, QByteArray(qtvirtualkeyboard));
但是在使用的时候遇到了一些问题#xff1a;
1、中文输入的时候没有输入提示
Qvirt…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.comonNewViewRequested: {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: visiblewhen: inputPanel.activePropertyChanges {target: inputPanely: parent.height - inputPanel.height}}transitions: Transition {from: to: visiblereversible: trueParallelAnimation {NumberAnimation {properties: yduration: 250easing.type: Easing.InOutQuad}}}onActiveChanged: {//当输入框活跃状态改变的时候}Component.onCompleted: {// VirtualKeyboardSettings.styleName retroVirtualKeyboardSettings.activeLocales [en_US, zh_CN]}}
}