QWebView Laden keine externen CSS
Frage
Ich verwende einen QWebView einige Inhalte angezeigt werden, und ich möchte benutzerdefinierte CSS verwenden, um die Ausgabe, um Fichte. Ich fand, dass ich die QWebSettings.setUserStyleSheetUrl()
Methode verwenden kann meine eigene CSS in die Ansicht zu laden. Die .css
-Datei im selben Verzeichnis wie mein Hauptprogramm zurück.
self.webview = QWebView(MainWindow)
self.webview.settings().setUserStyleSheetUrl(QUrl.fromLocalFile("myCustom.css"))
die benutzerdefinierten Stylings jedoch nicht geladen, wenn ich den Inhalt auf der Seite mit setHtml()
hinzuzufügen. Ich habe getestet, dass die CSS richtig in einem Standard-Browser auf die HTML bewirbt.
Jede Idee, was ich falsch mache?
Lösung
In Qt alle Pfade zu externen Dateien müssen in der ABSOLUTE Pfade, nicht relative Werte.
Um das Problem zu beheben, füge ich folgende Änderung vor:
path = os.getcwd()
self.webview.settings().setUserStyleSheetUrl(QUrl.fromLocalFile(path + "/myCustom.css"))
Und alles funktionierte richtig. Hoffentlich wird dies jemand in der Zukunft helfen und speichern sie ein paar Stunden debuggen.
Andere Tipps
In Qt alle Pfade zu externen Dateien müssen absolute Pfade sein, nicht relative Werte.
Das ist nicht wahr. Der folgende Code funktioniert für mich.
#include <QtCore>
#include <QtGui>
#include <QtWebKit>
int main(int argc, char ** argv)
{
QApplication app(argc, argv);
QMainWindow mainWindow;
QWebView* webView = new QWebView(&mainWindow);
webView->settings()->setUserStyleSheetUrl(QUrl::fromLocalFile("google.css"));
QFile source("google.html");
source.open(QIODevice::ReadOnly);
webView->page()->mainFrame()->setHtml(QString::fromUtf8(source.readAll().constData()));
mainWindow.setCentralWidget(webView);
mainWindow.show();
return app.exec();
}
Die CSS-Datei ist im selben Verzeichnis wie mein Hauptprogramm zurück.
Relative Pfade interpretiert werden relativ zum aktuellen Arbeitsverzeichnis, das nicht das gleiche Verzeichnis der als ausführbar sein müssen.
Ich lief in diesen, so dass ich meinen Test Schnipsel hier posten werde; das Snippet erzeugt seine eigenen .html und CSS-Datei im selben Verzeichnis wie die Python-Skript; und das Skript wurde aus dem gleichen Verzeichnis für die Prüfung genannt.
Mindestens in python
/ PyQt4
, es scheint, dass - in der Tat - es ist nur absolute Pfade, dass die Arbeit mit setHtml
.
Der Testcode kann entweder:
- nicht vollständig (komplett leer [ in dem Fall, dass ich wirklich gewünscht hätte
QWebView
einige Fehlermeldungen ausspucken, gefunden Wie detaillierte Fehlermeldung erhalten, wenn QtWebKit eine Seite laden fehlschlägt? , aber kann sie nicht zur Arbeit ]); - Inhalt anzeigen, ohne CSS-Stil;
- oder der Inhalt zeigt Stil:
Die setHtml
Methode scheint styled Text zu zeigen, nur mit Angabe c3
, wo file://
+ absoluter Pfad verwendet wird. ( EDIT: Just zu beachten wollte, dass der Vorschlag in diesem Beitrag , zu "try