屏幕键盘触摸屏弹出有或没有焦点在Qt WASM



我正在开发一个应用程序,作为wasm应用程序和windows应用程序部署。

我们正在使用windows 10操作系统的触摸屏平板电脑和谷歌浏览器访问web应用程序。我使用一个空的新qt项目来演示这个问题:

无论焦点在哪里,屏幕上的键盘都会弹出,这意味着它会在我触摸屏幕的任何地方弹出:

  • 如果btn被按下
  • 如果选择lineedit
  • 即使它后面没有焦点对象,也会被触摸。

我包含了这个行为视频的链接所以你可以看到问题所在。

屏幕上的键盘弹出没有焦点的问题发生只有当我为webassembly编译,工作良好的同一平板电脑上的MSVC。

what I tried:

  1. 捕获事件,然后使用:
ui->centralwidget->installEventFilter(this);
bool MainWindow::eventFilter(QObject *obj, QEvent *event)
{
//print event to qdebug 
static int eventEnumIndex = QEvent::staticMetaObject.indexOfEnumerator("Type");
QString TEXT_Event =  QEvent::staticMetaObject.enumerator(eventEnumIndex).valueToKey(event->type());;
qDebug()<<"TEXT EVENT="<<TEXT_Event;
if(TEXT_Event.contains("Paint")){
//dont show print event
}else{
ui->Main_PlainTextEdit->appendPlainText(obj->objectName()+"=>"+TEXT_Event);
}
if( event->type()==QEvent::MouseButtonPress|| event->type()==QEvent::MouseButtonRelease)
{
// handle on-screen keyboard
event->ignore();
event->accept();
}
return true;
}
  • setAttribute (Qt:: WA_TransparentForMouseEvents);
  • 不确定,因为它停用了所有鼠标输入=>无法交互,

  • setAttribute (Qt:: WA_AcceptTouchEvents);
  • 这只会将鼠标事件更改为触摸事件。

    也许有一个选项,我需要在表单编辑器或需要激活的触摸屏选项中勾选,也许捕获和忽略事件的方式是错误的。

    我不知道我做错了什么,但是我所有的尝试都没有解决这个问题,请帮助指导我?

    提前谢谢你。

    我是如何在Qt 5.15中解决它的。为了防止键盘弹出,我编辑了默认的index.html。但默认情况下,有一行:

    <canvas id="qtcanvas" oncontextmenu="event.preventDefault()" contenteditable="true"></canvas> 
    

    我添加了inputmode="none",也就是说我把它改成了:

    <canvas id="qtcanvas" oncontextmenu="event.preventDefault()" contenteditable="true" inputmode="none"></canvas>
    

    它的作用是防止屏幕上的键盘弹出。但请注意,即使在行编辑处于焦点状态时,它也不会弹出,因此如果需要在UI中输入文本,则必须使用物理键盘或自定义虚拟键盘部件。

    希望它能在未来的Qt版本中变得更好,我看到目前有一些Qt 6.4的修复计划https://bugreports.qt.io/browse/QTBUG-83064

    最新更新