QT: ¿Cómo puedo recibir eventos activados por objetos QWebElement?
-
05-10-2019 - |
Pregunta
Quiero recibir notificaciones cada vez que se hace clic en enlaces o campos de texto se cambian en un caso en Qt Webkit. ¿Cómo puedo conectar los detectores de eventos a un QWebElement
?
Sé que puedo poner un poco de Javascript controlador on onchange
/ onclick
de cada elemento, pero estoy buscando una solución más limpia.
Solución
El uso de esta función:
void QWebView::linkClicked ( const QUrl & url ) [signal]
Esta señal se emite cuando el usuario hace clic en un vínculo y la propiedad linkDelegationPolicy de la página se establece en delegar el manejo de la URL especificada enlace.
Se puede acceder al código HTML de la siguiente manera:
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);
Otros consejos
Parece que la única manera (como de Qt 4.6) es JavaScript.
De acuerdo con esta lista TODO para WebKit , hay planes para añadir un método QWebElement::connectEvent()
.