代码之家  ›  专栏  ›  技术社区  ›  swanson

QWebView未加载外部CSS

  •  3
  • swanson  · 技术社区  · 15 年前

    我使用QWebView来显示一些内容,我想使用自定义的CSS来调整输出。我发现我可以使用 QWebSettings.setUserStyleSheetUrl() 方法将我自己的CSS加载到视图中。这个 .css 文件与主程序在同一目录中。

    self.webview = QWebView(MainWindow)
    self.webview.settings().setUserStyleSheetUrl(QUrl.fromLocalFile("myCustom.css"))
    

    但是,当我使用 setHtml() . 我已经测试了CSS是否在标准浏览器中正确地应用于HTML。

    知道我做错了什么吗?

    3 回复  |  直到 11 年前
        1
  •  7
  •   fviktor    14 年前

    在qt中,所有指向外部文件的路径都需要 绝对的 路径,而不是相对路径。

    为了解决这个问题,我添加了以下更改:

    path = os.getcwd()
    self.webview.settings().setUserStyleSheetUrl(QUrl.fromLocalFile(path + "/myCustom.css"))
    

    一切正常。希望这将有助于将来的某个人,并为他们节省几个小时的调试时间。

        2
  •  1
  •   Piotr Dobrogost    14 年前

    在qt中,指向外部文件的所有路径 必须是绝对路径,而不是 相对的。

    那不是真的。下面的代码适用于我。

    #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();
    }
    

    .css文件在同一目录中 作为我的主要节目。

    相对路径是相对于当前工作目录来解释的,而当前工作目录不需要与可执行文件的目录相同。

        3
  •  1
  •   Community CDub    7 年前

    我刚刚遇到了这个问题,所以我将在这里发布我的测试代码段;代码段在与python脚本相同的目录中生成自己的.html和.css文件;脚本是从同一目录调用进行测试的。

    至少在 python / pyqt4 中,似乎-确实-it is only absolute paths that work with sethtml

    测试代码可以: