Как изменить стили -webkit-scrollbar в QWebView

Webkit предоставляет специальные свойства CSS для стилизации полос прокрутки, например:

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

Обычно я бы положил их внутрь <style> тег внутри <head>, но, к сожалению, QWebElement, похоже, не может ничего изменить внутри <head>, Я могу использовать setHtml() функция, чтобы указать начальный стиль, но не изменять его позже. Есть ли альтернативный способ применения стилей CSS к полосам прокрутки в QWebFrame?

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) в вашем проекте поставить таблицу стилей по умолчанию для всех QWebViews, см. пример:

  • Нажмите правую кнопку в вашем проекте> Добавить новый …> 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));
0

Другие решения


По вопросам рекламы [email protected]