gpt4 book ai didi

c++ - 在 QWebView 中设置文本输入焦点

转载 作者:搜寻专家 更新时间:2023-10-31 01:47:30 25 4
gpt4 key购买 nike

我试图在 QWebView 中显示 Google 登录对话框,我记得,Google 喜欢将键盘焦点设置到页面上的第一个输入字段(在本例中为电子邮件字段)。

不幸的是,QWebView 小部件实际上并没有尊重这种行为,因此加载页面时键盘焦点根本没有:

Login dialog with no focus

所以我决定深入挖掘一下,并将这段代码插入到我的类逻辑中:

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 键:

Focus with no keyboard

接下来我将该函数绑定(bind)到我的 Control 键,并继续产生奇怪的结果。

如果我手动将焦点放在密码字段中,然后按下 Control 键,我注意到我会继续在密码字段中获得键盘焦点,但在电子邮件字段中获得“视觉”焦​​点:

Keyboard caret in the wrong field

此外,当我在这种“状态”下键入内容时,有时在视觉和键盘焦点“重置”到密码字段之前,一封信可能会“泄漏”到电子邮件字段中:

Character leaking

是否有将键盘焦点重定向到我选择的输入字段的正确方法?

最佳答案

我设法通过 QKeyEvent 模拟制表符焦点来重定向键盘输入焦点:

void GoogleAuthDialog::pageLoaded(bool ok) {
if (ok) {
//Gets the first input element
QWebElement el = ui->webView->page()->currentFrame()->findFirstElement("input:not([type=hidden])");
if (!el.isNull()) {
el.setFocus();
}
// Simulate a forward tab, then back.
QKeyEvent *forwardTab = new QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::NoModifier);
QKeyEvent *backwardTab = new QKeyEvent(QEvent::KeyPress, Qt::Key_Tab, Qt::ShiftModifier);
QCoreApplication::postEvent(ui->webView, forwardTab);
QCoreApplication::postEvent(ui->webView, backwardTab);
}
}

在我看来,这看起来确实像是一个“hack-ish”解决方案,所以如果有一个“正确”的方法来做到这一点,我会洗耳恭听。

关于c++ - 在 QWebView 中设置文本输入焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19139491/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com