Seite 1 von 1

[gelöst]QWebView und linkClicked

Verfasst: 12. Juni 2012 15:13
von jerry42
Hallo,

ich versuche mich gerade zum ersten Mal am webkit. Soweit so gut.

Letztlich will ich eine Webseite einbetten auf der man ganz normal surfen kann.
Um allerdings bestimmte Links abzufangen hab ich die LinkDelegationPolicy auf DelegateAllLinks gesetzt. Dem Verhalten nach wird der Linkaufruf dann komplett abgefangen und hat auf der Webseite selbst keine Auswirkung mehr. Da ich aber nur bei bestimmten Links dieses Verhalten haben will, ruf ich für die anderen einfach ein webview->setUrl(<url die ich vom linkClicked-Signal erhalte>). Das funktioniert auch, allerdings lädt die Seite komplett neu, dass heißt ich hab für einen Bruchteil eine komplett weiße Seite.
Das ganze ist nur sobald ich die Links abfange. Ohne die Policy hab ich ein normales Surfverhalten.

Meine Frage ist nun, ob es einen anderen Weg dafür gibt auf bestimmte Links zu reagieren, ohne dass die Seite komplett neu gerendert wird.
Vielleicht versteh ich komplett die Logik falsch. Oder bild ich mir das ganze nur ein?

Vielleicht weiß jemand Rat.

Danke im Voraus.
jerry42

Linux, Qt 4.8.2

Code
Im Konstruktor des MainWindow

Code: Alles auswählen

    ui->webView->setUrl(QUrl("http://spiegel.de"));
    ui->webView->settings()->setAttribute(QWebSettings::PluginsEnabled, true);
    ui->webView->settings()->setAttribute(QWebSettings::JavascriptEnabled, true);
    ui->webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
Das linkChanged Signal ist dann verbunden mit folgendem Code:

Code: Alles auswählen

 
  if(url.path()=="/bla") {
    ...
  } else {
    ui->webView->setUrl(url);
  }

Re: QWebView und linkClicked

Verfasst: 12. Juni 2012 18:39
von Christian81

Re: QWebView und linkClicked

Verfasst: 13. Juni 2012 09:40
von jerry42
Danke Dir. Das war genau das was ich gesucht habe.

Hab jetzt die Policy wieder auf den default Wert gesetzt. Die "acceptNavigationRequest" Methode überschrieben, und kontrolliere jetzt da, ob meine bestimmte Url aufgerufen wurde. Klappt wunderbar.

Gruß
jerry42