我试图在QWebView中显示Google登录对话框,并且我记得Google喜欢将您的键盘焦点设置为页面上的第一个输入字段(在这种情况下,电子邮件字段)。在QWebView中设置文本输入焦点
不幸的是,QWebView控件实际上不尊重这种行为,并因此与键盘焦点加载页面上什么都没有:
所以我决定挖约一点点,并插入该代码段到类的逻辑:
void GoogleAuthDialog::pageLoaded(bool ok) {
if (ok) {
ui->webView->setFocus();
ui->webView->page()->mainFrame()->setFocus();
QWebElement el = ui->webView->page()->mainFrame()->findFirstElement("input:not([type=hidden])");
if (!el.isNull()) {
el.setFocus();
el.evaluateJavaScript("this.focus()");
el.evaluateJavaScript("this.click()");
}
}
}
而在我的头文件中声明如下:
...
private slots:
void pageLoaded(bool);
早在类的代码,我连从QWebView适当的信号,以我的槽:
connect(ui->webView, SIGNAL(loadFinished(bool)), this, SLOT(pageLoaded(bool)));
是的,我扔一切可能的事情我能想到的,在它的键盘焦点重定向到第一输入框。
不幸的是,代码似乎没有工作,因为它虽然专注在正确的输入框,我不能在它的内部,直到我点击它自己输入任何东西,或按下Tab键:
接下来,我将该函数绑定到我的Control键,并继续产生奇怪的结果。
如果我把主要精力投入到密码字段中手动,并按下控制键,我注意到,我会继续在密码字段键盘焦点,但在电子邮件领域的“视觉”重点:
此外,当我输入的东西在这个“国家”,偶尔有封信可能“泄漏”到电子邮件领域的视觉和键盘焦点将“重置”的口令字段前:
有没有适当的方法将键盘焦点重定向到我选择的输入字段?
看看,HTH:http://stackoverflow.com/questions/2843998/how-get-a-focus-element-in-qwebview-qwebpage – duDE
@duDE谢谢你的链接,但我不相信倾听焦点事件实际上会帮助我直接集中键盘输入。 – TheFuzzy