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.

Était-ce utile?

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().

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top