1

我正在开发一个嵌入式 Webkit 浏览器(在 linux 上使用 Qt 4.8.0),该浏览器在电视机上使用遥控器运行。到目前为止,我几乎完成了所有工作,现在我正在尝试处理<input>网页中的标签。

What I'd like to happen is: whenever an input field is selected, I'd like to pop my virtual keyboard and let the user enter text with his remote, then push back the result into the .

我已经尝试了几种方法来做到这一点:

  • 使用本教程安装QInputContext:我没有看到任何事件通过我安装的 InputContext。
  • 在浏览器的不同阶段(在 QApp、QGraphicsWebPage、QGraphicsWebView 中)重新实现各种eventFilter():我看到了 LOADS 的事件,但从来没有看到我感兴趣的事件(QEvent::RequestSoftwareInputPanel/ QEvent::CloseSoftwareInputPanel/ FocusIn/ FocusOut/ Enter/ Leave)。
  • usinginstallSceneEventFilter()给了我与前一点相同的结果。

由于我没有使用鼠标,因此我无法处理诸如“鼠标悬停”或“鼠标单击”之类的事件来确定<input>元素是否被聚焦。

所以我想知道如何连接到<input>网页中的任何内容以检测焦点何时到达它。请注意,即使该<input>字段是通过页面中的 Javascript 脚本动态插入的,我想这也必须有效。

我可以连接到 Qt 信号吗?
如何处理动态插入的新输入表单?

我尚未探索的可能解决方案:使用QT_KEYPAD_NAVIGATIONin mkspecs 作为我的拱门,然后过滤应该通过的 QEvent::EnterEditFocus。我宁愿坚持我现在拥有的香草 Qt,所以这是一个极端(我不确定它是否会起作用)。

4

1 回答 1

1

对于那些对解决方案感兴趣的人,这里是:

  • 用于addToJavascriptWindowObject()插入您自己的 C++ 对象,该对象至少有 1 个方法:showMultitap(cont QWebElement&). 假设您使用名称“multitap”插入它。

  • 注入如下所示的 javascript 代码:

    document.addEventListener("焦点", function(e){
        window.multitap.showMultitap(e); // 将落在你的 C++ 对象中
    }, 真的);
    

并在实际显示 VK 之前检查您的 C++ 处理程序该元素是文本元素。

  • 您将遇到的一个问题是您无法仅使用键盘(或远程)箭头退出文本字段,因此您必须添加DEFINES += QT_KEYPAD_NAVIGATON到 Qt 编译过程中(最好将它们放在拱门的 qmakespecs 中)。
于 2013-03-16T08:06:15.140 回答