Qt: Wie kann ich empfangen Ereignisse von QWebElement Objekte fired?
-
05-10-2019 - |
Frage
Ich mag informiert, sobald Links angeklickt werden oder Textfelder werden in einer Webkit-Instanz in Qt geändert. Wie kann ich Ereignis-Listener zu einem QWebElement
anschließen?
Ich weiß, dass ich einige Javascripts auf jedem Element onchange
/ onclick
Handler setzen kann, aber ich bin auf der Suche für eine saubere Lösung.
Lösung
Mit dieser Funktion:
void QWebView::linkClicked ( const QUrl & url ) [signal]
Dieses Signal ausgesendet wird, wenn der Benutzer klickt auf einen Link und die linkDelegationPolicy Eigenschaft Seite gesetzt, um den Link zu delegieren für die angegebene URL-Behandlung.
Sie können den HTML-Code zugreifen, wie folgt:
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);
Andere Tipps
Sieht aus wie der einzige Weg (wie von Qt 4.6) ist JavaScript.
Nach dieser ToDo-Liste für WebKit , gibt es Pläne, eine QWebElement::connectEvent()
Methode hinzuzufügen.