Подтвердить что ты не робот

Как настроить внешний вид ссылок в QLabels с помощью таблиц стилей?

У меня есть QLabel с таблицей стилей Qt, которая устанавливает темный фон:

QLabel {
background: black;
color: white;
}

Это отлично работает, пока я не добавлю текст со встроенным URL-адресом и не поставлю Qt::TextFormat в Qt::RichText. Ссылка отображается как синий по умолчанию, который трудно читать на темном фоне.

Я пробовал настроить его с помощью таблицы стилей, например:

a { color: white; }
QLabel!visited { color: white; }

но это не имеет никакого эффекта. Единственное, что работает, это изменение приложения QPalette:

QPalette newPal(qApp->palette());
newPal.setColor(QPalette::Link, Qt::white);
newPal.setColor(QPalette::LinkVisited, Qt::white);
qApp->setPalette(newPal);

Однако для этого требуется, чтобы цвет был жестко запрограммирован. Есть ли способ установить цвет из таблицы стилей?

ИЗМЕНИТЬ:

Я обнаружил еще одну проблему с настройкой палитры. Если я хочу просто изменить палитру моего виджета (заменяя widget на qApp в примере выше), это не сработает. Я не хочу влиять на все остальные QLabels в приложении, так как я могу ограничить изменения палитры этого виджета?

4b9b3361

Ответ 1

Короткий ответ - нет. Недавно мне пришлось это сделать.

  • QLabel!visited не работает, потому что Qt не отслеживает, посещались ли QLabel или нет.
  • QLabel { color: ... } не работает для ссылок. Невозможно найти причину, но все, что я нашел, - это предложение использовать QPallete в этом случае.

Ответ 2

У меня был небольшой успех, явно устанавливающий QPalette - он работает, если вы установите его для всего приложения, но не в том случае, если вы установите его в виджет. В конце концов, самое простое, что мне нужно было сделать, это использовать QTextBrowser, который поддерживает subset HTML. Затем я мог бы переопределить цвет ссылок, используя обычную таблицу стилей CSS:

QTextBrowser browser;
// IMPORTANT! - set the stylesheet before the content
browser->document()->setDefaultStyleSheet("a {color: white; }");
browser->setText(html);

Ответ 3

Один из способов - добавить style="color: whatever" или класс во внутреннюю ссылку <span> ссылки. Я еще не понял, как применить это ко всему приложению, но это хорошее начало.