Qt: Как я могу получать события, запускаемые объектами QWebElement? - PullRequest
2 голосов
/ 28 мая 2010

Я хочу получать уведомления при щелчке ссылок или изменении текстовых полей в экземпляре Webkit в Qt. Как я могу подключить слушателей событий к QWebElement?

Я знаю, что могу добавить немного Javascript в обработчик onchange / onclick каждого элемента, но я ищу более чистое решение.

Ответы [ 2 ]

3 голосов
/ 28 мая 2010

Похоже, единственный способ (с Qt 4.6) - это JavaScript.

Согласно этому списку TODO для WebKit , планируется добавить метод QWebElement::connectEvent().

2 голосов
/ 29 мая 2010

Использование этой функции:

void QWebView::linkClicked ( const QUrl & url )   [signal]

Этот сигнал посылается всякий раз, когда пользователь нажимает на ссылку, а свойство linkDelegationPolicy страницы устанавливается для делегирования обработки ссылки для указанного URL.

Вы можете получить доступ к HTML-коду следующим образом:

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