Hi,
seit längerem beschäftige ich mit damit, in einer C++ Anwendung ein HTML Dokument mit dem QT WebKit -> WebView Objekt anzuzeugen.
U.a. auch http://doc.qt.nokia.com/4.5/qwebview.html
Dort finde ich auch die Textstelle "If you want to provide support for web sites that allow the user to open new windows, such as pop-up windows, you can subclass QWebView and reimplement the createWindow() function.".
Gerne würde ich die URL anzeigen, wenn jemand einen Link in einem neuen Fenster öffnen möchte. Das passiert im WebView Objekt durch Mausklick-rechts und "Open in new window" oder wenn ein target="_blank" Link oder javascript eine neue Seite öffnen möchte.
Derzeit passiert gar nichts, wenn versucht wird, einen Link in einem neuen Fenster zu öffnen.
Gemäß dem obigen Zitat von der Dokumentation sollte ich es mit createWindow versuchen. Das habe ich getan und bin daran gescheitert, dass dieser Funktion die URL zu keinem Zeitpunkt übergeben wird, siehe
QWebView * QWebView::createWindow ( QWebPage::WebWindowType type
Könnt Ihr mir bitte verraten, wie ich die URL abgreifen kann?
Danke für Eure Hilfe
WebView: "Open in new window"
Moin,
... Du musst in der createWindow(...)-Funktion eine neue Instanz einer QWebView erzeugen, und diese als return-Wert zurück geben.
Ich habe das bei mir so gelöst, dass ich (an meine TabView-Klasse) ein Signal
sende, das als Funktionsargument einen Zeiger die neue Instanz enthält.
Somit kann ich in dem entsprechenden SLOT diese QWebView in einen Tab packen oder in einem Fenster öffnen.
Die Url ist zu diesem Zeitpunkt als url() in der QWebView abrufbar.
Willst Du ein neues Fenster öffnen, musst Du natürlich eine Ebene höher gehen und deine QApplication bzw Dein mainWindow neu instanzieren.
LG
Andy
... Du musst in der createWindow(...)-Funktion eine neue Instanz einer QWebView erzeugen, und diese als return-Wert zurück geben.
Ich habe das bei mir so gelöst, dass ich (an meine TabView-Klasse) ein Signal
sende, das als Funktionsargument einen Zeiger die neue Instanz enthält.
Somit kann ich in dem entsprechenden SLOT diese QWebView in einen Tab packen oder in einem Fenster öffnen.
Die Url ist zu diesem Zeitpunkt als url() in der QWebView abrufbar.
Willst Du ein neues Fenster öffnen, musst Du natürlich eine Ebene höher gehen und deine QApplication bzw Dein mainWindow neu instanzieren.
LG
Andy
Hi,
danke für Deine Antwort.
Also das klingt vielversprechend, aber eine Unklarheit besteht weiterhin.
Innerhalb von createWindow erstelle ich nun also eine neue Instanz von QWebView, die mit return zurückgegeben wird.
Wie und wo frage ich nun am besten die ->url() ab. Vor dem return in createWindow wird die URL wohl noch nicht gesetzt sein.
Muss dazu nun noch eine vererbbare Funktion der neuen QWebView Instanz überschrieben werden?
Danke
PS: Deine Anwendung ist nicht zufällig OpenSource?
Dann könnte ich es selbst nachlesen...
danke für Deine Antwort.
Also das klingt vielversprechend, aber eine Unklarheit besteht weiterhin.
Innerhalb von createWindow erstelle ich nun also eine neue Instanz von QWebView, die mit return zurückgegeben wird.
Wie und wo frage ich nun am besten die ->url() ab. Vor dem return in createWindow wird die URL wohl noch nicht gesetzt sein.
Muss dazu nun noch eine vererbbare Funktion der neuen QWebView Instanz überschrieben werden?
Danke
PS: Deine Anwendung ist nicht zufällig OpenSource?
nosig.
Hi,
also "wann" die url() in der QWebView verfügbar ist kann ich Dir auch nicht sagen. Meine Funktion läuft folgend ab:
In der QTabView gibt es einen SLOT, der auf das oben beschriebene Signal reagiert:
zu diesem Zeitpunkt wird die URL der QWebView ja schon selbstständig aufgerufen - ob da eine drin ist oder nicht, geht mich nichts an da das
wiederrum der QNetworkAccessManager regelt ob da was zu holen ist
Aber ich denke, dass zu diesem Zeitpunkt eine URL da ist sonst würde in der Anwendung ja nichts passieren ...
Mein Code ist natürlich OSS - ich arbeite seit 2 Jahren ausschliesslich mit Ubuntu (obwohl etwas sehr angepasst auf meine eigenen Bedürfnisse).
Bei Fragen diesbezüglich: PN an mich, dann schick ich dir meinen Browser mal
LG
also "wann" die url() in der QWebView verfügbar ist kann ich Dir auch nicht sagen. Meine Funktion läuft folgend ab:
In der QTabView gibt es einen SLOT, der auf das oben beschriebene Signal reagiert:
Code: Alles auswählen
void MY_CLASSNAME::openTab(QWebView *view) {
addTab(view, QLatin1String("Unknown"));
}
wiederrum der QNetworkAccessManager regelt ob da was zu holen ist
Aber ich denke, dass zu diesem Zeitpunkt eine URL da ist sonst würde in der Anwendung ja nichts passieren ...
Mein Code ist natürlich OSS - ich arbeite seit 2 Jahren ausschliesslich mit Ubuntu (obwohl etwas sehr angepasst auf meine eigenen Bedürfnisse).
Bei Fragen diesbezüglich: PN an mich, dann schick ich dir meinen Browser mal
LG
hallo rabby
hast Du das Problem lösen können? Ich stehe nämlich vor der gleichen Herausforderung: da ist ein Button mit window.open(...) und ich habe die Methode createWindow(Type...) auch implementiert, bekomme aber (und in meinen Augen logischerweise) ein leeres neues Fenster angezeigt, wenn ich eine neue Instanz von QWebView erzeuge und zurück gebe.
hast Du das Problem lösen können? Ich stehe nämlich vor der gleichen Herausforderung: da ist ein Button mit window.open(...) und ich habe die Methode createWindow(Type...) auch implementiert, bekomme aber (und in meinen Augen logischerweise) ein leeres neues Fenster angezeigt, wenn ich eine neue Instanz von QWebView erzeuge und zurück gebe.
ich bin ein Grautier!!smudo hat geschrieben:hallo rabby
hast Du das Problem lösen können? Ich stehe nämlich vor der gleichen Herausforderung: da ist ein Button mit window.open(...) und ich habe die Methode createWindow(Type...) auch implementiert, bekomme aber (und in meinen Augen logischerweise) ein leeres neues Fenster angezeigt, wenn ich eine neue Instanz von QWebView erzeuge und zurück gebe.
Man muss den Namen der HTML-Datei, die per Popup geöffnet werden soll auch richtig schreiben! Dann klappts!