我試圖在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