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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top