我正在使用嵌入式Webkit浏览器(在Linux上使用Qt 4.8.0),它可以在电视机上使用遥控器运行。
到目前为止,我已经完成了所有工作,现在我正在尝试处理网页中的<input>
标记。
我想要发生的事情是:每当选择输入字段时,我想弹出我的虚拟键盘并让用户使用遥控器输入文本,然后将结果推回到。
我已经尝试了几种方法来做到这一点:
eventFilter()
:我看到事件的LOADS,但从未看到我感兴趣的事件({{ 1}} / QEvent::RequestSoftwareInputPanel
/ QEvent::CloseSoftwareInputPanel
/ FocusIn
/ FocusOut
/ Enter
)。Leave
给出了与前一点相同的结果。由于我没有使用鼠标,因此我无法处理“鼠标悬停”或“鼠标点击”等事件,以确定installSceneEventFilter()
元素是否已被聚焦。
所以我想知道如何连接到网页中的任何<input>
来检测焦点何时到达它。请注意,即使<input>
字段是动态通过页面中的Javascript脚本插入,我想这也必须有效。
我可以连接到Qt信号吗? 如何处理动态插入的新输入表单?
我还没有探索过可能的解决方案:在我的arch中使用mkspecs中的<input>
,然后过滤应该传递的QEvent :: EnterEditFocus。我宁愿坚持现在的香草Qt,所以这是一个极端(我不确定会有效)。
答案 0 :(得分:1)
对于那些对解决方案感兴趣的人,这里是:
使用addToJavascriptWindowObject()
插入您自己的C ++对象,该对象至少有一个方法:showMultitap(cont QWebElement&)
。假设您插入名称为“multitap”。
注入如下所示的javascript代码:
document.addEventListener("focus", function(e){ window.multitap.showMultitap(e); // will land in your C++ object }, true);
在实际显示VK之前,检查C ++处理程序中元素是文本元素。
DEFINES += QT_KEYPAD_NAVIGATON
(最好是把它们放在你的拱门的qmakespec中。)