QWebView で Google のログイン ダイアログを表示しようとしていますが、思い出すと、Google はキーボード フォーカスをページの最初の入力フィールド (この場合は電子メール フィールド) に設定するのが好きです。
残念ながら、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 キーにバインドすると、奇妙な結果が得られました。
手動でパスワード フィールドにフォーカスを置いて Control キーを押すと、パスワード フィールドに引き続きキーボード フォーカスがあり、電子メール フィールドに「視覚的な」フォーカスがあることに気付きました。
また、この「状態」で何かを入力すると、ビジュアルとキーボードのフォーカスがパスワード フィールドに「リセット」される前に、メール フィールドに文字が「漏れる」ことがありました。
選択した入力フィールドにキーボード フォーカスをリダイレクトする適切な方法はありますか?