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

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

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

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


person Username Obfuscation    schedule 19.10.2014    source источник
comment
QWebElement, похоже, также не может манипулировать тегами <style> с областью действия в разделе <body>. Он делает все, что я хочу, пока я не изменю имя тега на style.   -  person Username Obfuscation    schedule 20.10.2014
comment
Привет! Мой ответ решит вашу проблему? Если да, проверьте правильность, если нет, скажите, чего не хватает.   -  person Guilherme Nascimento    schedule 12.04.2015
comment
Я пометил ваш ответ как правильный на вопрос, который я задал, но, как я уже упоминал, мне нужно динамически генерировать стили во время выполнения, потому что я заранее не знаю, какой цвет полосы прокрутки потребуется. Если бы я жестко запрограммировал каждую возможную цветовую схему в файле ресурсов, то это был бы очень большой файл ресурсов.   -  person Username Obfuscation    schedule 14.04.2015
comment
Я добавил пример для загрузки QString как файл CSS, попробуйте использовать, если он не работает для вас, пожалуйста, снимите мой ответ и приведите пример того, как вы сделали с setHTML (я знаю, что это не сработало, просто чтобы понять, как получить данные). Надеюсь, я смогу вам помочь.   -  person Guilherme Nascimento    schedule 14.04.2015


Ответы (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, см. пример:

  • Щелкните правой кнопкой мыши в своем проекте > Добавить новый... > 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));
person Guilherme Nascimento    schedule 16.11.2014
comment
К сожалению, мне нужно иметь возможность динамически изменять стиль полосы прокрутки во время выполнения, и нет возможности заранее узнать, какую цветовую схему запросит пользователь. Следовательно, жесткое кодирование цветов в файле ресурсов не очень помогает? - person Username Obfuscation; 18.11.2014