如何修改QWebView中的-webkit-scrollbar样式

时间:2014-10-19 14:25:49

标签: c++ qt qwebview qwebkit

Webkit为样式滚动条提供了特殊的css属性,例如:

::-webkit-scrollbar-track {
    background-color:white;
}

通常我会将这些标记放在<style>内的<head>标记内,但遗憾的是QWebElement似乎无法修改<head>内的任何内容。我可以使用setHtml()函数指定初始样式,但不能在以后修改它。是否有另一种方法可以将CSS样式应用于QWebFrame中的滚动条?

1 个答案:

答案 0 :(得分:1)

可以使用QWebSettings::setUserStyleSheetUrl,参见示例:

const QString path = PATH_OF_CSS_FILE;
QWebSettings *settings = QWebSettings::globalSettings();
settings->setUserStyleSheetUrl(QUrl(path));

实施例

如果动态CSS是一个字符串,您可以创建一个方法并使用QTemporaryFile,如下所示:

void MainWindow::setStyle(const QString data)
{
    QTemporaryFile file;
    if (file.open()) {
        const QString path = file.fileName();

        QWebSettings *settings = QWebSettings::globalSettings();
        settings->setUserStyleSheetUrl(QUrl(path));
    }
}

用法:

setStyle("::-webkit-scrollbar-track { background-color:white;}")

如果需要加载动态文件,您可以创建一个替代方法,如下所示:

void MainWindow::setStyle(const QUrl url)
{
    QWebSettings *settings = QWebSettings::globalSettings();
    settings->setUserStyleSheetUrl(url);
}

使用QRC

答案的一部分只是其他实现的提示;

您可以在项目中使用资源(QRC)为所有QWebView添加默认样式表,请参阅示例:

  • 点击项目中的右键&gt;添加新...&gt; Qt> Qt资源文件&gt;输入名称&#34; resources.qrc&#34;

  • 点击&#34; resources.qrc&#34;中的右键。 &GT;在编辑器中打开

  • 放置名为scrollbar.css的CSS文件(css文件必须与项目位于同一文件夹中)。

将它放在&#34; main.cpp&#34;:

#include <QWebSettings>
#include <QUrl>

...

const QString path = "qrc:/scrollbar.css";
QWebSettings *settings = QWebSettings::globalSettings();
settings->setUserStyleSheetUrl(QUrl(path));