Webkit предоставляет специальные свойства CSS для стилизации полос прокрутки, например:
::-webkit-scrollbar-track {
background-color:white;
}
Обычно я бы положил их внутрь <style>
тег внутри <head>
, но, к сожалению, QWebElement, похоже, не может ничего изменить внутри <head>
, Я могу использовать setHtml()
функция, чтобы указать начальный стиль, но не изменять его позже. Есть ли альтернативный способ применения стилей CSS к полосам прокрутки в QWebFrame?
Возможно использование 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) в вашем проекте поставить таблицу стилей по умолчанию для всех QWebView
s, см. пример:
Нажмите правую кнопку в вашем проекте> Добавить новый …> Qt> Файл ресурсов Qt> Введите имя «resources.qrc»
Нажмите правую кнопку в «resources.qrc»> Открыть в редакторе
Поместите файл CSS с именем scrollbar.css (файл CSS должен находиться в той же папке, что и ваш проект).
Поместите это в ваш «main.cpp»:
#include <QWebSettings>
#include <QUrl>
...
const QString path = "qrc:/scrollbar.css";
QWebSettings *settings = QWebSettings::globalSettings();
settings->setUserStyleSheetUrl(QUrl(path));