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?

War es hilfreich?

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:

compare_qtwebkit-test.py

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

scroll top