QWebView ne se charge pas CSS externe
Question
J'utilise un QWebView pour afficher un contenu et je veux utiliser CSS personnalisé pour embellir la sortie. Je trouve que je peux utiliser la méthode QWebSettings.setUserStyleSheetUrl()
pour charger mon propre CSS dans la vue. Le fichier .css
est dans le même répertoire que mon programme principal.
self.webview = QWebView(MainWindow)
self.webview.settings().setUserStyleSheetUrl(QUrl.fromLocalFile("myCustom.css"))
Cependant, les stylings personnalisés ne se chargent pas quand j'ajouter le contenu à la page en utilisant setHtml()
. Je l'ai testé que le CSS applique correctement au code HTML dans un navigateur standard.
Toute idée de ce que je fais mal?
La solution
Dans Qt, doivent tous les chemins vers des fichiers externes comme ABSOLU chemins, pas ceux relatifs.
Pour résoudre le problème, j'ajouter pour faire le changement suivant:
path = os.getcwd()
self.webview.settings().setUserStyleSheetUrl(QUrl.fromLocalFile(path + "/myCustom.css"))
Et tout a fonctionné correctement. Espérons que cela aidera quelqu'un à l'avenir et de les enregistrer quelques heures de débogage.
Autres conseils
Dans Qt, tous les chemins vers des fichiers externes doivent être des chemins ABSOLU, non ceux relatifs.
Ce n'est pas vrai. Le code ci-dessous fonctionne pour moi.
#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();
}
Le fichier Css est dans le même répertoire comme mon programme principal.
Les chemins relatifs sont interprétés par rapport au répertoire de travail courant qui ne constitue pas le même que le répertoire exécutable.
Je viens de croiser, alors je vais poster mon extrait de test ici; l'extrait génère son propre fichier .html et .css dans le même répertoire que le script python; et le script a été appelé dans le même répertoire pour les tests.
Au moins dans python
/ PyQt4
, il semble que - en effet - il est uniquement chemins absolus qui travaillent avec setHtml
.
Le code de test peut soit:
- complètement échouer (complètement vide [ dans ce cas, j'aurais vraiment voulu
QWebView
cracher quelques messages d'erreur, trouvés Comment obtenir un message d'erreur détaillé lorsque qtwebkit ne parvient pas à charger une page? , mais ne peut pas l'obtenir travailler ]); - montrer le contenu sans style css;
- ou afficher le contenu de style:
La méthode setHtml
semble montrer que du texte de style avec la spécification c3
, où file://
+ chemin absolu est utilisé. ( EDIT: je voulais juste noter que la suggestion dans ce poste , pour "essayer