【发布时间】:2010-05-27 20:47:29
【问题描述】:
我希望在 Qt 中的 Webkit 实例中单击链接或更改文本字段时收到通知。如何将事件侦听器连接到 QWebElement?
我知道我可以在每个元素的 onchange / onclick 处理程序上添加一些 Javascript,但我正在寻找更简洁的解决方案。
【问题讨论】:
标签: qt events webkit qtwebkit qwebelement
我希望在 Qt 中的 Webkit 实例中单击链接或更改文本字段时收到通知。如何将事件侦听器连接到 QWebElement?
我知道我可以在每个元素的 onchange / onclick 处理程序上添加一些 Javascript,但我正在寻找更简洁的解决方案。
【问题讨论】:
标签: qt events webkit qtwebkit qwebelement
看起来唯一的方法(从 Qt 4.6 开始)是 JavaScript。
根据this TODO list for WebKit,有计划增加一个QWebElement::connectEvent()方法。
【讨论】:
使用此功能:
void QWebView::linkClicked ( const QUrl & url ) [signal]
每当用户单击链接并且页面的 linkDelegationPolicy 属性设置为委托指定 url 的链接处理时,都会发出此信号。
您可以按如下方式访问 HTML 代码:
QString Widget::evalJS(const QString &js)
{
QWebFrame *frame = ui->webView->page()->mainFrame();
return frame->evaluateJavaScript(js).toString();
}
evalJS(QString("document.forms[\"f\"].text.value = \"%1\";").arg(fromText));
evalJS(QString("document.forms[\"f\"].langSelect.value = \"%1\";").arg(langText));
evalJS(QString("translate()"));
QString from = evalJS("document.forms[\"f\"].text.value");
QString translation = evalJS("document.forms[\"f\"].translation.value");
ui->textEditTo->setText(translation);
【讨论】: