Qt: Comment puis-je recevoir des événements déclenchés par des objets QWebElement?
-
05-10-2019 - |
Question
Je veux recevoir des notifications lorsque des liens sont cliqués ou champs de texte sont modifiés dans une instance de WebKit dans Qt. Comment puis-je brancher des écouteurs d'événement à un QWebElement
?
Je sais que je peux mettre un peu Javascript est désactivé sur le gestionnaire onchange
/ onclick
de chaque élément, mais je suis à la recherche d'une solution de nettoyage.
La solution
En utilisant cette fonction:
void QWebView::linkClicked ( const QUrl & url ) [signal]
Ce signal est émis chaque fois que l'utilisateur clique sur un lien et la propriété linkDelegationPolicy de la page est définie à déléguer le lien pour le traitement de l'URL spécifiée.
Vous pouvez accéder au code HTML comme suit:
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);
Autres conseils
On dirait que la seule façon (à partir de Qt 4.6) est JavaScript.
Selon cette liste TODO pour WebKit , il est prévu d'ajouter une méthode de QWebElement::connectEvent()
.