2 Stimmen

QTWebview lädt kein Bild aus CSS

Ich verwende QTWebview in einer Fensteranwendung. Wenn ich eine Seite mit der setHtml-Funktion lade, werden manchmal keine Inhaltsbilder in meinem Webview geladen.
Dieses Problem tritt besonders nach dem Laden mehrerer Seiten auf.

Ich bin sicher, dass dies ein Problem mit QTWebview ist, weil meine Seite vollständig in Browsern geladen wird.

Ich habe Firebug eingebettet und etwas gefunden. Der QTWebview lädt tatsächlich keine neue CSS-Datei. Zum Beispiel habe ich 2 CSS-Dateien. Zuerst kopiere ich die erste Datei in den Stylesheet-Ordner und lade die Webseite. Danach kopiere ich die zweite Datei in das Stylesheet und zwinge den Webview neu zu laden. Nichts passiert. Alle CSS-Elemente in Firebug sind die gleichen wie beim ersten Mal, das Aussehen ändert sich nicht. Ich denke, dass QTWebview automatisch Daten zwischenspeichert, aber keine Lösung dafür finden kann. Hat jemand das gleiche Problem wie ich???

3voto

sahara108 Punkte 2829

Ich habe endlich die Lösung für dieses Problem gefunden. Da ich immer die gleiche URL lade und nur das Stylesheet ändere, verwendet QWebview automatisch seine Zwischenspeicherdaten. Ich habe es behoben, indem ich QWebSettings::clearMemoryCaches(); hinzugefügt habe, bevor ich neu geladen habe.

2voto

Reza Ebrahimi Punkte 3508

Diese Dinge sind zur Verwendung von QWebView in lokalen Inhalten und wahrscheinlich für Web mit einigen Änderungen gleich. Wenn Sie eine CSS-Datei laden möchten, müssen Sie sie in der HTML-Datei platzieren und die HTML-Datei in QWebView laden. Sie können Ihre HTML-Datei in einer Ressourcendatei (.qrc) einbetten und sie aus der Ressource laden, indem Sie das Präfix qrc hinzufügen. Hier ist ein Beispiel:

In der addresses.h-Datei:

const QString MAIN_HTML = "qrc:/pfad-zu-ihrer-HTML-Datei-in-der-Ressourcendatei.html";    

Im MainWindow.cpp:

QWebView *webView = new QWebView();
webView->settings()->setAttribute(QWebSettings::LocalContentCanAccessRemoteUrls, true);
webView->page()->settings()->setAttribute(QWebSettings::JavascriptEnabled, true);
webView->page()->settings()->setAttribute(QWebSettings::OfflineWebApplicationCacheEnabled, true);
webView->page()->setLinkDelegationPolicy(QWebPage::DelegateAllLinks);
webView->settings()->setUserStyleSheetUrl(QUrl("qrc:/pfad-ihrer-css-datei-in-der-ressourcendatei.css"));

Und laden Sie schließlich die HTML-Datei:

webView->load(QUrl(MAIN_HTML)); // denken Sie daran, die Headerdatei einzuschließen -> #include "addresses.h"

Wenn Sie Ihre Dateien von Ihrer lokalen Festplatte laden möchten, verwenden Sie QUrl, indem Sie einfach qrc aus Ihrer Adresse entfernen:

 QUrl::fromLocalFile(":/pfad-zu-ihrer-css-datei.css"); 

In Ihrer HTML-Datei (wenn sie sich in der Ressourcendatei befindet):

In Ihrer HTML-Datei (wenn sie sich auf der lokalen Festplatte befindet):

Es ist also am besten, alle Ihre Dateien in einer Ressourcendatei einzubetten, die dann bei der Kompilierung in die Ausführungsdatei eingebettet wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X